原文:Sololearn Cryptography教程
可能有翻译不准确的地方,请批评指出!谢谢。
什么是密码学?
密码学是一种协议构建和分析,为了阻止第三方或者公众访问私人信息。信息安全包括很多方面,比如数据机密性,数据完整性,认证,不可抵赖性,是现代密码学的核心。
现代密码学非常依赖数学理论和计算科学,密码学算法的设计围绕计算的难度展开,使算法不容易被破解。
存在理论上的信息安全方案,即使拥有无限的算力,也无法被破解。
密码学同样在数字权限管理和数字媒体版权保护方面扮演重要角色。
Caesar Cipher凯撒密码
凯撒密码是已知最早也是最简单的密码,是一种替换类型的加密算法,每一个字母被向后偏移指定位数的字母代替。
例如,向右偏移3:
Plaintext: "defend the east wall of the castle"
Ciphertext: "efgfoe uif fbtu xbmm pg uif dbtumf"
Vigenere cipher维吉利亚密码
Vigenere加密表
key是用户定义的,同时是保密的,key重复的与原文字母一一对照,按加密表中的位置确定加密后的字符,解密反之。
例如:
key: webwebweb
plaintext: sololearn
ciphertext: osmwpfwvo
Hashing 哈希
哈希函数,是一种数学算法,从一个字符串生成哈希值,是唯一确定的。
哈希可以作为一种验证方法, 验证信息传输过程中是否被修改。
哈希在数据库中被用作索引,用于检索items,因为较短的哈希键相对于原值更容易被找到。
Hashed Passwords
服务端存储密码的哈希值,取代存储原密码,减小了当服务器被攻陷时,用户密码被泄露的风险。哈希值是不能被还原为原密码的,所以拿到密码的哈希值也没有用
Salted Passwords
黑客拿到用户密码的哈希表后,无法还原密码,但是对于common passwords简单的常用密码,可以使用字典攻击的方法破解密码————对所有可能的简单密码做哈希运算,得到的哈希值与密码哈希表做对照,匹配正确的密码。
Salt是使字典攻击更困难的一种方法。Salt和哈希函数都保存在服务器端,在做哈希运算之前,将Salt(一个随机字符串)与密码做连接。只要Salt有足够的长度,就可以有效的阻止字典攻击对简单密码的破解。因为黑客生成所有可能用到的Salt和简单密码对应的单向hash值,这样的计算量是非常巨大的。
需要注意的是,使用Salt仅仅起到的是对一个密码文件的普通字典攻击的保护,对单一密码的协同攻击并没有作用。它可以保护相同密码不被同时破解,而对于简单密码并不会有加强作用。
Symmetric encryption 对称加密
加密和解密使用相同的密钥,这也是对称加密的主要缺点。凯撒密码就是最简单的对称加密算法。
现代的加密系统仍然使用对称加密算法完成对大多数信息的加密,对称加密不光被用于加密,同时被用于对其他加密原语的实现。
AES(Advance Encryption Standard)是一个对称分组密码,他被美国政府使用,用于包含机密信息,在全世界的软硬件中被广泛使用。
Asymmetric encryption 非对称加密
又叫public-key cryptography,使用一个密钥对,public key是公开的,可以被广泛的传播,分发,而private key是不公开的。实现了两个功能:使用公钥验证信息是否是私钥拥有者发出;使用私钥解密被公钥加密的信息。
有些非对称加密的算法实现方案,可以基于假定的数学问题的难度来证明是安全的,例如将两个大素数的乘积分解或计算离散对数。
一些非对称加密算法的例子
- Diffie-Hellman key exchange protocol # 基于计算离散对数
- DSS(Digital Signature Standard)
- Various password-authenticated key agreement techniques
- RSA encryption algorithm # 基于两个大素数的乘积分解
非对称加密更安全,但是对称加密算法更快速,所以两种算法经常被一起使用。
Hash 函数同样被用于很多加密系统
Digital signature数字签名
数字签名是用于呈现数字消息或文档的真实性的数学方案。有效的数字签名使收件人有理由相信该邮件是由已知发件人创建的(身份验证)。
数字签名是大多数加密协议套件的标准元素,通常用于软件分发,金融交易和合同管理软件。
实现方法有:
其中一种方法是使用您的私钥加密特殊标记(可能包括您的姓名,ID或任何其他个人信息),只能使用您的公钥解密,并将标记与您的消息一起发送。然后接收方可以使用发送方的公钥检查真实性
另一种方法是获取消息的哈希码并使用私钥加密,然后将其与消息一起发送。此方法还使您有机会检查消息的完整性。正如我们在散列课中看到的那样,如果我们从消息中更改一个字符,则散列函数会为我们提供完全不同的散列码。
PGP(Pretty Good Privacy)是一种密码系统,包括散列,对称和非对称加密,数字签名等。