密码学
在密码学中,有一个五元组:{明文、密文、密钥、加密算法、解密算法},对应的加密方案称为密码体制(或密码)
明文:是作为加密输入的原始信息
密文:是明文经加密变换后的结果,即消息被加密处理后的形式
密钥:是参与密码变换的参数,一切可能的密钥构成的有限集称为密钥空间
对称加密算法
加密和解密使用同一个密钥,主要算法包括:DES、3DES、RC2、RC4
例如:
非对称加密算法
两个密钥同时产生:一把密钥(公钥)是公开的,任何人都可以得到。另一把密钥(私钥)只有密钥的拥有者知道
用其中一把密钥(公钥或者是私钥)加密的信息,只能用另一把打开,主要算法包括:RSA算法,ECC(椭圆曲线)算法
由已知的公钥几乎不可能推导出私钥,其实可以推出,按现在的计算机技术水平,要破解目前采用的1024位RSA密钥,需要上千年的计算时间,所以基本等于推不出来
例如:
两种加密算法的区别与特点
对称加密 的加密和解密效率都要高于 非对称加密
因此一般的做法是将报文用对称加密算法进行加密,然后将对称加密的密钥用非对称加密的公钥进行加密,发送出去,接收方使用私钥解密得到对称加密的密钥之后对报文进行解密
对称加密 密钥分发困难,容易泄露,非对称加密 要安全许多
对称加密 的密钥在传递过程中一旦泄露,报文的安全性将不复存在
非对称加密 采用密钥对的形式,公钥用于加密,私钥用于解密,公钥公开发布,私钥个人保存,安全许多
非对称加密 双方在进行通信时,需要两对密钥对,各自生成自己的密钥对之后将公钥发送给对方,实现加密通讯
非对称加密 公钥用于加密,私钥用于解密,公私钥能互换吗?
从数学原理上说,私钥也可用于加密,公钥也可用于解密
公钥加密只有私钥能解开,私钥加密只有公钥能解开
但若是私钥当作公钥使用,用于加密并且传播出去,由于私钥本身可以推出公钥,可以使用推出来的公钥进行解密,因此一般公钥和私钥不会互换功能
实际系统中,公钥指数e都很小,一般固定为3或者65537,而公钥的另外一个参数模N与私钥是共享的,所以公私钥不能互换。
至于为什么这样,我的理解是为了加快公钥运算速度,也就是验签速度其实不是任选一个作公钥的 非对称加密还有一个特点就是 从私钥计算公钥很简单 从公钥计算私钥很困难 这也是保证公钥加密算法安全的一个因素
非对称加密 理论上公钥和私钥可以互相推导出
公钥推出私钥非常困难
私钥推出公钥比较容易
一般的 RSA (一种非对称加密算法实现形式)實現中,公钥的生成选择的 Modular Multiplicative Inverse 都會是一个较小的数值,目的是降低 Hamming Weight,也就是体现在你看到的公钥比私钥短很多这上面。这就导致了,如果有人拿到了私钥,就可以较为轻松的计算出一个有效的公钥。
所以永远不要把私钥公开出去。
公钥一般固定65537(16进制10001),运算快也就是加密速度快(非对称加密,公钥只用作加密,不用作解密的);私钥则取得比较大。可以互换的,互换后副作用是:加密变慢、解密复杂度降低
非对称加密 私钥用于签名,公钥用于认证(验签)
所谓签名就是用私钥进行加密,认证就是公钥用于解密
当私钥进行加密时,此时作用不是加密原始数据,而是证明该数据确实来自私钥的拥有者,没有被伪造或是篡改。由于只能用你的公钥进行解密,并且只有本人拥有私钥,所以私钥进行加密时可以代表自己的身份
当公钥进行解密时,就是用于验证对方是不是使用私钥的人,如果不是,用公钥是无法解开的,如果是,用公钥即可解开,对其身份得以认证
参考
RSA算法原理(一)—————–
RSA算法原理(二)—————–