公钥密码学-算法和硬件实现

#个人学习经验和知识总结,欢迎大家传阅,禁止商业用途 #

1. 背景

在对称加解密中,加密和解密的密码是同一个,共享的密钥如果需要从一方发送给另一方,那这个过程就存在泄漏的风险。是否可以构造一个方法,使得不需要传送秘钥,或者即使秘钥公开,密文也不能被破解呢?答案是存在的。

举个例子,我有一个保险箱,这个保险箱有两个门,对应两把钥匙key1,key2;这个保险箱有个特点,一个门打开后只能往里面放东西,那另一个门打开后只能取东西;bob要给我传一个烤鸡腿,于是我打算把钥匙key2放在保险箱上,bob可以用,其他人也可以用,bob用钥匙打开一个门,然后把烤鸡腿放进去。第二天我用钥匙key1(偷偷藏着,不能让人发现)打开另外一个门,把鸡腿取出来了,于是就完成了一个鸡腿的传送过程,该过程非常安全,也不用偷偷地给bob提前偷偷地递钥匙。

上面那个例子就是公钥密码学:两把相关联的钥匙key1,key2,key2公布出来用来给发送方加密消息,key1私藏用来解密密文。即使大众知道了加密的密文,只要没有key1,那就没法解密。

公钥密码学主要有四大类,分别是:RSA算法,Diffiie-Hellman密钥交换,ElGamal密码体系和椭圆曲线加密(ECC),下面我们分别介绍下:

2. RSA算法

说明: 其中gcd是最大公约数函数,加密和解密过程的运算为幂次方和取模,这两个运算是很简单且迅速的。RSA破解的最大难点是啥呢?步骤5是RSA的重点,对于一个很大的数£(比如2^512),我们可以列举出很多个对应的d,但是我们不确定哪个才是alice的那个d,这样RSA的安全性能得到保证

 对于加解密方如何快速进行幂次模乘,有兴趣的可以维基百科了解下。

3. Diffie-Hellman密钥交换

开篇提到,如果我们采用对称加密算法,则加解密双方需要使用一个共同的密钥,这个密钥在分发过程中会被泄露。如果会话双方发送一部分信息,然后均根据对方的信息和自己剩余的信息拼凑成相同密钥,这种方案是否可行呢?答案是可以的。

算法如下:

 DH密钥交换双方都可以用各自的私钥获得共享密钥,然后作为其对称加密算法的密钥;

其算法安全性和RSA一样,依赖于离散对数的难度,即知道密文YA和素数q,整数,也很难计算出指数XA。

4. EIGamal 密码体制

算法流程如下:

说明:密文C2是通过中间变量K来加密的,而K的信息隐藏在C1中,所以发送密文中包含了C1的小,alice通过C1来获取中间变量K,然后再解密C2获得明文。

标题3和4分别是公钥密码学中两大类,分别是密钥交换和信息加解密,那么能否通过一种算法,既可以实现密钥交换,也可以实现加解密呢?椭圆曲线(ECC)加密最合适了。

5. 椭圆曲线密码学(ECC)

椭圆曲线函数是一个三次方程,因为其几何图像和椭圆比较类似,所以取名为椭圆曲线,这里的运算都是基于mod q的

                        y^{2}+axy+by=x^{3}+cx^{2}+dx+e

5.1 密钥交换如下

椭圆曲线的安全性保证在于离散对数求解,也就是说,nA*G表示从G点开始,经过椭圆曲线上多个特殊点,到达了K点,但是很难逆推回去,因为就哪一个特俗点是起始点G。

5.2 明文加解密如下:

说明:通过Pm+k*pB将明文的信息隐藏起来,而kG又是一个引子,可以恢复出隐藏衣k*pB, 通过减去隐藏衣,露出来的就是本来的面目-----明文Pm

6. RSA Python代码实现

待补充

7. verilog硬件实现

待补充

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值