这几天在读《Blown to Bits》中有关加密的章节,在这里做些小结。《Blown to Bits》一本有关计算科学的科普书,这本书是以Creative Commons协议发布的,可以从http://www.bitsbook.com/免费下载。
通过场景介绍基本原理是比较通俗易懂的方式,这里首先布置一个场景:
主人公:小白,小黑,小花
背景:小白想和小黑通过公网通信,小花想
人物介绍:
小白:拥有一个数字私匙a
小黑:拥有一个数字私匙b
非人物介绍:
公共公匙:g,任何人都可以获得
双方开始通话:
小白:利用公共公匙g和自己的私匙a生成自己的公匙A
小黑:利用公共公匙g和自己的私匙b生成自己的公匙B
小白:获取小黑的公匙B,并利用自己的私匙a与B进行运算C = a * B = a * b* g
小黑:获取小白的公匙A,并利用自己的私匙b与A进行运算C = b * A = b * a* g
小花:获取了公匙g, A, B,但无法获得C
这样,双方就可以利用C进行加密、解密操作从而进行安全通信了。
我的迷惑:知道了g和A,难道不能计算出a = A/g吗?不太明白这个数学上的原理,书里也没细讲,欢迎热心人留言讲解一下:)
主人公:小白,小黑们,小花
背景:小白想让小黑们给他发送加密的信息,小花想获取这些信息
人物介绍:
小白:拥有一个数字私匙a,一个公匙A = a * g
小黑:拥有一个数字私匙b,一个公匙B = b * g
非人物介绍:
公共公匙:g,任何人都可以获得
小黑们开始向小白发送消息:
小黑:接受小白的公匙A,利用自己的私匙b和小白的公匙A对数据进行加密C = A * b,然后将加密数据和公匙B发送给小白
小白:接受小黑们的加密信息信息和公匙B,利用C = a * B解密信息
小花:获取了A,B,g,但无法解密数据
这种方式的核心仍是Key Agreement Protocol的原理,与Key Agreement Protocol的不同之处是小黑往往每次都换私匙b,因为不涉及到交互,因此保密性更强。
数字签名的一个主要作用是验证发行人,例如验证声明为小白发布的信息的确是小白所发布,而不是其他人的冒名顶替。
主人公:小白,小黑,小花
背景:小白发布了一个信息,加入自己的签名,小花想伪造小白的签名,从而发布虚假信息
人物介绍:
小白:拥有一个公匙-私匙对
小白开始发布信息:
小白:在自己发布的信息中提取一个digest,然后使用私匙对这个digest进行加密
小黑:使用小白的公匙对小白的digest进行解密,然后与小白所发布的信息进行对照,如果一致,则可以确定这个信息的确是小白所发
小灰:无法获得小白的私匙a,因此对digest进行加密
公匙-私匙对(key-pair)的主要实现算法就是RSA算法
RSA算法思想的提出是在Diffie和Hellman于1976年发表的论文中提出的,然后Ron Rivest, Adi Shamir和Len Adleman在1977年提出了一种算法实现。
其核心思想:使用私匙加密的数据只有用公匙才能解密,使用公匙加密的数据只有使用私匙才能解密
这种方法的数学原理我还不清楚,希望热心人帮忙补充:)