安全知识入门

1.常见攻击手段

  1. 破坏信息的完整性,篡改信息
  2. 拒绝服务
  3. 窃听,拦截信息
  4. 假冒
  5. 抵赖
  6. 重放
  7. 猜测预测
  8. 拖库, 信息泄露

2.密码学基础

   2.1 HASH

  1. 介绍

    1. 摘要性,把任意大小的数据映射成固定长大小的摘要信息,不同信息有不同的哈希值。
    2. 不可逆性,通过hash值不能反推出原始数据。
  2. 用途:
    1. 防止信息被篡改
    2. 保证信息完整性
    3. 数据去重
  3. 常见算法:
    1. checksum: 就是简单的总和校验码,一般在通信中用于保证数据的完整性和准确性,比如tcp协议。
    2. crc32:32bit,性能好,碰撞率高,一般用于图片去重。
    3. md5: 128bit,一般用户密码加密,文件校验,对于密码加密已经不安全,因为已经找到了碰撞条件
    4. sha1: 基本同md5, 已经找到了碰撞条件, 但用于文件校验还是没问题的
    5. sha256: 相对安全,可以用于密码加密
    6. Bloom Filter: 多个hash函数组合进行去重,一般用于大数据量的去重,比如搜索引擎网页收录。 如果它说一个项目不在一个集合里,那肯定不在,如果说在,那有很小的可能不在。

  2.2 随机数

  1. 介绍

    1. 指定一个范围和种子,随机的生成一个数字
  2. 用途:
    1. 防猜测预测,让黑客猜测不到信息地址或加密因子。
    2. 防止重放,每次请求里的随机数不一致,用户重放请求时随机数已被使用而拒绝请求。
    3. Hash里当作salt,让相同的明文加盐后生成不同的hash值,防止被人用字典攻击破解密码。
    4. 加密算法中当作iv(初始化向量),让相同的明文块生成不同的密文,增加破解难度。
    5. 从集合里随机抽取数据,保证一段时间内唯一,比如tcp的seq。
    6. 动态口令,和时间,种子相关的随机数。
  3. 常用算法:
    1. 线性同余: 最常用的伪随机数生成算法,如果知道种子有可能被预测到。
    2. GUID: 全球唯一字符串,很难被猜测到。

   2.3 对称加密

  1. 介绍:加密和解密需要使用相同的密钥,有流加密和块加密之分,一般可以进行大数据量的加密。
  2. 用途:
    1. 防止信息泄露
    2. 防止信息拦截
  3. 常见算法:
    1. DES: 64bit密钥, 破解难度较低
    2. 3DES: 三重DES,128bit密钥,破解难度较高
    3. RC2: DES的建议替代算法, 密钥长度可变,1-128bit, 速度较快
    4. RC4: 强度高,速度快, 不安全
    5. AES: 广泛使用的加密算法,速度快,安全级别高,已经成为美国加密标准, 目前 AES 标准的一个实现是 Rijndael 算法

   2.4  非对称加密

  1. 介绍:

    1. 加密和解密使用不同的密钥,一般只能加密很少量的数据,而且性能较差。
    2. 公钥可以公开,公钥加密的数据私钥可以解密,反之也是。
    3. 私钥需要秘密保管,私钥签名的数据,公钥可以验证签名。
    4. 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
  2. 用途:
    1. 验证身份,数字签名, 可以解决否认、伪造、篡改及冒充等问题
    2. 数据加密, 防止信息泄露和拦截
  3. 常见算法:
    1. RSA: 基于大数运算和数学原理,可以让加密和解密使用不同的密钥。
    2. DSA: 数据签名算法,

3.身份认证方案

   3.1HTTP基本认证

  1. 介绍:用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。
  2. 优点:
    1. 浏览器支持广泛。
  3. 缺点:
    1. 不能防止信息泄露,base64只是编码,不是加密。
    2. 不能防窃听
    3. 不能防重放
    4. 不能防拖库
  4. 使用场景:
    1. 在可信网络环境中可使用基本认证。
    2. 使用HTTPS做传输层。

   3.1 HMAC

  1. 介绍:

    1. 用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。
    2. 消息认证码是基于密钥和消息摘要【hash】所获得的一个值,可用于数据源发认证和完整性校验。
  2. 原理:
    1. client要给server发送message,先用key和message加起来,然后哈希得出一个MAC
    2. 然后用户把明文message和MAC发给server
    3. server知道key,用同样的算法得到MAC,看和client请求的MAC是否一致
    4. 如果MAC一致,说明message是拥有key的人发送的,而且message没有被篡改
  3. 优点:
    1. 实现了身份认证,实现了不可抵赖性
    2. 保证了数据完整性,达到了防篡改的效果
    3. HMAC与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效
  4. 缺点:
    1. message是明文,不能防窃听
    2. 不能防重放
  5. 应用:
    1. 挑战/响应(Challenge/Response)身份认证,如SIP,HTTP
    2. Cookie签名

   3.2 HTTP摘要认证(Digest access authentication, rfc2069)

  1. 介绍

    1. 它在密码发出前,先对其应用哈希函数,这相对于HTTP基本认证发送明文而言,更安全。
  2. 原理
    1. client请求认证页面, 不提供用户名和密码
    2. server返回401应答
      1. realm:认证域, 明文,
      2. nonce: 随机数, 明文,只使用一次
    3. client再次发起请求
      1. 对用户名、认证域(realm)以及密码的合并值计算 MD5 哈希值,结果称为 HA1。
      2. 对HTTP方法以及URI的摘要的合并值计算 MD5 哈希值,例如,"GET" 和 "/dir/index.html",结果称为 HA2。
      3. 对 HA1、服务器密码随机数(nonce)、请求计数(nc,防止重放)、客户端密码随机数(cnonce)、 HA2 的合并值计算 MD5得到response 值以及cnonce。
    4. server收到应答,因为服务器拥有与客户端同样的信息,因此服务器可以进行同样的计算,以验证客户端提交的 response 值的正确性。
  3. 优点
    1. 密码明文不需要传输,所以明文不会被泄露,这样server可以不存明文密码,而是只存HA1。
    2. 可以客户端随机数cnonce,够防止选择明文攻击(劫持到密文后猜测加密算法及明文)。
    3. nonce允许包含时间戳, 过期后就失效,防止重放攻击。
    4. 服务器也可以维护一个最近发出的nonce的列表以防止nonce重用。
    5. 防监听,防重放, 防抵赖,身份认证
  4. 缺点
    1. RFC 2617 中的许多安全选项都是可选的, 某些时候会降级为RFC 2616。
    2. 容易受到中间人攻击, 摘要访问认证没有提供任何机制帮助客户端验证服务器的身份。
    3. 使用HTTPS加密同时使用这些弱明文协议解决了许多摘要访问认证试图要防止的许多威胁。
    4. 使用md5是使用到了md5的不可逆性,但md5现在有可以攻击的方式,如穷举攻击(密码比较简单时),字典攻击,
    5. 如何面对冲突攻击(不同明文哈希后相同)(rfc2617)。
  5. 其它说明
    1. 可以允许每一个nonce只使用一次,但这样就会迫使客户端在发送每个请求的时候重复认证过程
    2. nonce在生成后立刻过期是不行的,因为客户端将没有任何机会来使用这个nonce。
    3. 客户端多次请求可以重用nonce,但得提供新的cnonce。在后续的请求中,nc比前一次要大。

   3.3  https/tls

  1. 介绍:它是一个安全传输协议,但也可以进行身份认证。

    1. 加密传输数据: 服务端和客户端之间的所有通讯,都是加密的。
    2. 用于身份验证: 保证服务器就是他声称的服务器。
    3. 维护数据的完整性,确保数据在传输过程中不被改变。
    4. RC4, X509
  2. 握手机制-简化版
    1. client要访问一个server, 知道server的域名domain
    2. client向server发起请求 2.1. ssl版本号 2.2. 加密算法类型 2.3. 随机数
    3. server给client返回应答 3.1 ssl版本号 3.2 加密算法类型 3.3 随机数 3.4 自己的证书(公钥) 3.5 随机数签名。
    4. client验证服务端返回的应答 4.1 证书是否过期 4.2 发型证书的CA是否可靠(会和本地的可信任CA列表对比) 4.3 server的公钥能否解开server返回的随机数签名 # 确认server有该证书的私钥 4.4 server的证书授权的域名是否是server的域名
    5. client随机产生一个用于对称加密密钥,然后用server的公钥加密,发给Server
    6. server用自己三私钥解密出对称加密密钥。
    7. 后续的通信都用对称加密密钥进行加解密。
  3. 优点:
    1. 防窃听
    2. 防重放
    3. 防中间人攻击,
    4. 保证数据完整性性
    5. 防止会话劫持
  4. 缺点
    1. 不能防止信息泄露,拖库,只是保证传输层安全
    2. 一般不能用于客户端身份验证,需要配合http基本认证
    3. 建立连接速度慢

    3.4  oauth

  1. 介绍:OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。
  2. 原理:
    1. 用户访问客户端的网站,想操作自己存放在服务提供方的资源。
    2. 客户端向服务提供方请求一个临时令牌。
    3. 服务提供方验证客户端的身份后,授予一个临时令牌。
    4. 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
    5. 用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
    6. 授权成功后,服务提供方引导用户返回客户端的网页。
    7. 客户端根据临时令牌从服务提供方那里获取访问令牌 。
    8. 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
    9. 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

  4.密码认证安全

   4.1  双因素认证,动态口令

  1. 介绍: 1.简单来说,双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统, 如ATM。

    1. 目前主流的双因素认证系统是基于时间同步型,
    2. 市场占有率高的有DKEY双因素认证系统、RSA双因素认证系统等
    3. 主流的有硬件令牌、手机短信密码、USB KEY、混合型令牌(USBKEY+动态口令), 密保卡,手机令牌
  2. 优点
    1. 密码丢失后,黑客不能登录你的账户
  3. 缺点
    1. 使用不方便

    4.2  用密钥加密用户密码

        1. 怎么预防拖库?
         
1.用户认证安全,AD,LDAP认证。
          2.用户信息单独服务器存放,提供内网API调用,只提供单个查询。

 2.拖库后怎么防破解?

方法1:

    1. 本机生成一个密钥key存磁盘上,对称加密密钥。
    2. 创建用户时,用户提供password, 然后数据库里保存db_password = encrypt(key, hash(password))
    3. 这样黑客把数据库拖走后,因为没有key解开用db_password,所以用户密码还是安全的。
    4. 用户登录时提供密码password, 哈希后是hash(password), 然后uncrypt(key, db_password),
      1. 两者比较,一致就是认证通过
      2. 不一致就是终止认证
    5. 优点:
      1. 防止拖库
    6. 缺点
    7. key丢了就完蛋了,谁也登录不上了。

       方法2:

    1. 密码MD5(MD5(passwd)+salt),每个用户随机生成一个salt,存在在用户信息一起。 salt的长度要长于20位,也不能太长,影响效率。

4.3 Secure Remote Password protocol

  1. 介绍

    1. 一个认证和密钥交换系统,它用来在不可靠的网络中保护口令和交换密钥。
    2. 通过消除了在网络上发送明文口令的需要,并且通过安全的密钥交换机制来使用加密,改进了安全性。
    3. 服务器不保存密码或密码的散列值, 防止字典攻击. 而只是保存验证因子(verifier).
    4. 客户端和服务器可以各自计算出一个会话秘钥(session key), 其值相同. 防止窃听和会话劫持.
    5. 好多游戏服务端用SRP认证,比如魔兽世界。
  2. 优点
    1. 防窃听
    2. 防暴力破解,字典攻击, 弱口令也不容易被破解
    3. 即使口令数据库被公之于众,攻击者仍然需要一个庞大的字典去搜索来获得口令。
    4. 速度快,不需要证书和第三方认证机构
  3. 缺点
    1. 浏览器不支持,得自己实现
  否则服务器就会终止认证。
时间: 2024-11-08 13:46:11

安全知识入门的相关文章

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

脱壳基础知识入门

现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳.越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那 么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的.除了密码学的应用,越来越多的软件加壳了,因此要求解密者 必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛.壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹.另外,论坛现在两极 分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但

Linux基础知识入门

[Linux基础]Linux基础知识入门及常见命令. 前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1:192.168.40.11Linux ip:192.168.40.128 2,Linux是一个操作系统, 与windows的区别:Linux:图形化界面简单,性能很快,在企业中当做服务器来使用.Windows:图形化界面很炫,性能相对差,大众用户.windows的服务器: windows2003,win

XHTML & CSS 基础知识入门

查看一个网页的源代码只需要右击空白处点击查看网页源代码或者ctrl+U即可. 下载text editor文档编辑器 学习html和css前,我们需要一个text editor文档编辑器,计算机自带的notepad 可以写html文件,但是用文本文档写出来的文件可阅读性不强.我们可以下载notepad++来写html (notepad++也可以用来写很多其他语言的文件)且是免费试用的,很方便.[Notepad++官方下载地址] 下载安装好Notepad后我们就可以开始写html文件了. HTML里

大数据Hadoop核心知识入门学习注意事项

今天来介绍新手学习hadoop的入门注意事项.这篇文章一来谈谈hadoop核心知识学习. 首先hadoop分为hadoop1.X和hadoop2.X,并且还有hadoop生态系统,那么下面我们以hadoop2.x为例进行详细介绍: Hadoop的核心是mapreduce和hdfs. Mapreduce:mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑.我们都知道mapreduce是一种编程模型,那么它能干什么,对我有什么用

AngularJS实用基础知识---入门必备

前言 今天来和大家学习一下AngularJS-- AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序. AngularJS 学习起来非常简单. 一.AngularJS指令与表达式 [AngularJS常用指令]1.ng-app:声明Angular所管辖的区域,一般写在body或HTML上,原则上一个页面只有一个.2.ng-model:把元素值(比如输入域的值)绑定到应用程序的变量中.eg:<input type="text"

外挂基础知识入门

http://www.cnblogs.com/gamesky/archive/2013/02/05/2893281.html 转:http://bbs.gameres.com/thread_142398_1_1.html 某些白痴菜鸟加本人QQ,扯了几天几夜.我确实累了...爱谁谁吧... 爱用C++的用C++,爱用delphi用delphi,爱用易语言的用易语言...想怎么用你们就用什么... 别扯这么多... 骗子教程,专门骗钱没什么真技术.五代科技    www.5dai.com天下无挂 

各种数据结构与算法知识入门经典(不断更新)

自荐者和推荐者请留言 基本算法 贪心算法:贪心算法 作者:独酌逸醉 贪心算法精讲 作者:3522021224 递归和分治:递归与分治策略 作者:zhoudaxia 图论 图的遍历(DFS和BFS):  图的遍历 作者:jefferent 最小生成树(Prim算法和Kruskal算法): 贪心算法--最小生成树 作者:独酌逸醉 Dijkstra算法: 最短路径之Dijkstra算法详细讲解 作者:愚人有节 拓扑排序:拓扑排序作者: midgard 如何去理解 拓扑排序算法 作者:张善友 关键路径:

Docker 基础知识-入门篇

1. Docker简介和KVM区别 1.1 docker的三大理念 构建 运输 运行 ps:有点类似于java代码,一次构建到处运行 1.2 docker结构 相关说明:image: 和虚拟机的镜像类似container: 用镜像创建的实例repository: 类似于yum仓库docker client: 命令行输入的docker命令docker server: 启动的docker进程 1.3 docker和kvm的区别 1.虚拟机需要hypervisor这个中间层来进行支持,上面跑的每一个虚

前端基础知识入门概要(自我回顾用)

HTML基础 HTML术语 HTML注释 <!--注释内容--> 用于描述代码功能,浏览器解析时会忽略注释内容. HTML元素 HTML文档的重要组成部分,一个HTML由大量元素组成,HTML中的所有内容结构,都是靠元素组织到页面的. 元素的组成部分 一般元素 <a href = "/classroom/17" > 立即加入 </a>:元素 <a> 标记名 <a href = "/classroom/17">