码迷,mamicode.com
首页 > 其他好文 > 详细

密码学知识普及

时间:2015-09-15 01:30:16      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

密码学知识普及

密码学知识普及

加密

对称密码: 机密和解密的密钥是相同的, 因此必须向接受者配送密钥
公钥密钥 (非对称密码): 无需向接收者配送用于解密的密钥

对称密码算法: DES, 3DES, AES (Rijndael)
公钥密码算法: RSA, ELGamal, Rabin, 椭圆曲线

加密密钥 和 解密密钥 不同

接收者 先将加密密钥发给发送者 (在这个过程中, 加密密钥即使被窃听者知道了也没所谓),
发送者使用加密密钥对通信内容进行加密并发送给接收者,
而只有拥有解密密钥的人 (即接收者本人) 才能够进行解密

加密密码 叫 公钥 pubilc key, 解密密码叫 private key

中间人攻击:

假装成接收者, 向发送者提供自己的公钥, 然后发送者以 假公钥 加密内容, 中间人就可以解密了

对称密码不会被公钥密码取代:

公钥密码处理速度只有对称密码的几百分之一, 因此, 公钥密码并不适合用来对很长的消息内容进行加密

混合密码系统:

用对称密码提高速度, 用公钥密码保护回话密钥

dec 和 dec3 加密可以通过一定的时间来破解, 目前比较好的算法是 aes
aes 又有 ECB CBC CFB OFB CTR 等模式, 不推荐使用 ECB 模式, CBC 和 CTR 比较好 – 《实用密码学》

加密 openssl enc -des3 -a -salt -in IN_FILE_NAME -out OUT_FILE_NAME
解密 openssl enc -d -des3 -a -salt -in IN_FILE_NAME -out OUT_FILE_NAME

openssl enc -aes-xxx -a salt -in IN_FILE_NAME -out OUT_FILE_NAME
openssl enc -d -aes-xxx -a salt -in IN_FILE_NAME -out OUT_FILE_NAME

单向加密

对数据进行计算特征码, 特性 One-Way (Collision-free)


算法:

md5       已经被攻破
sha1      已经被攻破
sha256
sha512

openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile

信息认证码

单向加密的延伸应用 message authentication code MAC

数据完整性检验, 通信双方认证

算法:

CBC-MAC
HMAC: 使用 md5 和 sha1 算法

MAC 的应用

  1. SWIFT 环球银行金融电信协会
  2. IPsec
    对互联网基本通信协议 – IP 协议 增加安全性的一种方式, 对通信内容的认证和完整性校验都是采用消息认证码
  3. SSL/TLS
    https

数字签名

  1. 生成消息签名的行为
    由消息发送者完成 (称为对消息签名), 意味着 "我认可该消息的内容"
  2. 验证消息签名的行为
    接收者 或者 第三方机构验证者完成, 验证成功意味着这个签名是正确的, 失败意味着这个消息是伪造的

在数字签名中, 生成签名和验证签名都是需要 不同的密钥 完成的

签名密钥只有发送方才有 (private key)
验证密钥是 第三方机构 或者 接收者拥有 (public key)
使用 private key 进行数字签名, 其他人无法生成相同的签名 (密文)

和公钥密码相反的是

数字签名使用 private key 加密生成签名, 用 public key 解密验证签名

实际上, 由于消息一般很长, 不对消息进行签名, 而对消息的散列值进行签名

签名的应用:

如, 确定发布的网页没有被第三方篡改

中间人攻击:

伪装成接收者, 对发送者发送的数据进行接收, 然后以发送者的身份发送给接收者,
接收者误以为他是发送者, 就 确定接收, 然后中间人就可以发送垃圾信息了, 例如篡改网页

证书, 就是 public key

certification authority, CA 认证机构 (就是第三方机构, 用来确认 public key 是不是真的)
VeriSign 公司: 最有名的认证公司

证书的标准规范 X.509

公钥基础设施 PKI

假设 a 访问 b, b 为了证明自己是真的, 就要向 CA 证明自己是真的

  1. 生成一个密钥对
  2. 然后向 CA 发送一个请求, 生成一个证书 (里面含有公钥信息) 保存到 CA 仓库中
  3. CA 提供仓库中的证书给 a, 让 a 下载得到 b 的 public key

随机数

伪随机数, 例如可以使用 time() 函数, 然后对一个数取模, 这样容易遭受到攻击
真随机数, 事先在一个名为随机数池的文件中积累随机比特序列, 当密码软件需要伪随机数种子的时候,
可以从这个随机数池中去取出所需长度的随机比特序列来使用 (当前随机池里面的内容要保密, 否则没有意义)

密码学知识普及

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4808955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!