一些基本的问题
传统的加密方法,较为原始的办法就是将原始信息编码成一串看不懂的文本,然后发给通信对象,通信对象没有和你协定解密的方法,一般也看不懂,这时候需要你事先和他约定好解密方法。
一旦你们协定的加密方案泄露,信息泄露就在所难免
非对称基本的想法,一个公钥和私钥
公钥是经过私钥进行一种“陷门”运算得到,计算公钥容易,但是反过来由公钥推算私钥却是不切实际的困难,那么通过使用公钥加密的文本可以连同被加密信息一起发送,解密时需要使用私钥
于是数据传输可以不传送私钥,降低被窃取的风险。
非对称加密一般的步骤
- 数据接收方先向全世界广播自己的公钥
2.需要向接收方发送信息的发送方用这个公开的公钥加密数据 - 接收方收到发送方的数据后,使用只有自己知道的私钥解密
以上过程解决了密码系统一个长期的结构性问题,即秘钥的传输困境。
如果不传秘钥,接收方没法知道如何破解信息
如果传秘钥,那么被中间人获得秘钥之后,信息相当于是裸奔了。
在没有非对称加密之前,对这个问题只能忍受。祈祷你的秘钥不会被人破解或截获。
数学原理
非对称加密基于数学上一种所谓“陷门”的操作,一堆操作在效果上看起来是互逆
但是其中一个方向上的操作较为简单,另一个反过来的方向则远远比正操作难。
我们如果经过一些技术上的设计,抽象,把简单那个方向设计成加密动作,难得那一面设计成解密动作,大致上会形成一种加密方案:
加密很容易,甚至可以把一些关键信息公开,然而解密很难
形式上,设正向变换函数是
逆向函数是
其中加密中用到的 p 是一个公钥,这个公钥可以随意传输,公开。任何人可以用这个公钥加密文本,但是加密之后没有私钥无法解密。从 q 到p是一个耗时很快的运行 但是从 p 解出q却是极端的困难。
在数论中,因式分解 就是一个具备这种特征的计算。
已知两个素数,计算他们的乘积(公钥)十分容易
但是已知两个素数的乘积,将它们的素因子找出来却是十分困难。并且随着素数的位数变大,这个困难性呈指数增长。
大素数通常指那些位数超过 300 的位数,它们相乘的结果使用计算机用现有的因子分解算法很难找到原来的素因子。
基于大数素因子分解的著名的加密方案是RSA加密
网友评论