密码学原理(非对称秘钥算法简介)


       随着时代的发展,我们越来越看重信息安全。我们今天就来了解一下数据加密的手段及它的原理。

       首先,在网络上传输数据,想要保证数据的安全,就要对数据进行加密。最基本的,我们能想到的,可能就是电视上侦探片常见的拿一本书,约定好哪个数字对应哪页的哪个个字,通过一串数字就可以传递信息。
    那么问题来了,在互联网上,两端的人互相不认识,也不可能千里迢迢的跑到一起专门去约定一下用哪本书,哪个数字代表书上的哪个字,有那个的时间,可以直接面对面的交流嘛,还需要什么加密。那你可能又疑惑,那直接通过网络去沟通密码啊,那问题又回来了,怎么保证你们沟通的过程不被人窃取呢?今天我就来说说要在互联网两端进行安全的信息传输,所使用的常见的加密技术。

        我先介绍一下对称加密与非对称加密。顾名思义,对称加密是指密钥在加密端与解密端相同的加密方法,只需将加密过程倒着执行一遍即可得到明文。非对称加密就是加密端与解密端密钥不同的加密方法,明文也不是倒着执行一遍就可以得到的。
        常见的对称加密算法有DES、三重DES等,其中DES已经可以通过暴力来破解,虽然也是需要很长时间。但是,有一种加密方法,经证明是无条件安全的,在理论上无法破译。那就是一次性密码本。根据明文长度,产生跟明文长度一样的比特序列(也就是随机的0/1序列),与明文进行异或操作,解密就可以根据密文和随机的比特序列也就是密钥解出密文。一次性密码本是无法被暴力破解的,因为是随机序列,一个个去比对,先不说耗时问题,即使得到正确的明文,你也无法确定它是正确的。
        一次性密码本,因为是随机的,会得出很多乱序的内容,也会得出一些看起来正常的内容,你无法确定得到的哪一个是正确的明文。但是一次性密码本这种加密方式无法被实际应用。第一,明文假如有100M,同样的密钥也会有100M大小。并且既然叫一次性密码本,那这个随机序列是不能重用的。因为如果知道了这个随机序列,那之前所有用这个随机序列加密的信息都会被破译,所以只能一个用一次。抛开文件大小和重用不说,另一个无法解决的就是密钥的传输问题。如果黑客只截取了密文还好,他无法破译,那如果密钥传输过程中也被截取,那密文直接会被破译。有了可信任的传输密钥的方法的话,何不直接传明文?岂不多此一举。解决办法也有,就是下面要说到的非对称加密。

        非对称加密算法,常见的有国密SM2、RES等算法。到这你可能就疑惑了,非对称加密算法跟对称算法不都一样要传输密钥吗?是如何保证密钥传输的安全性的呢?是,密钥是需要传输的,但让你大跌眼镜的是它的密钥根本不需要保证安全性。下面就来解释一下为什么。非对称算法,加密和解密用的密钥不一样,所以是非对称加密算法。它分私钥和公钥,公钥用来加密,私钥用来解密,这样,可能还不是太清晰,我们来举个例子。假如有n个人,每个人都一对属于自己的密钥对,公钥可以给要给自己传信息的人,让别人用公钥将信息加密后再传过来,私钥只有自己知道,所以即使黑客知道了公钥也无法解密,只能知道私钥的自己解密。而自己,要给别人传信息时,可以先获取到对方的公钥,加密后再发送,那么能破解这段密文的只有对方。密钥的传输问题也就解决了。

        既然这样,你可能又有疑惑了,是怎样一种神奇的算法可以有这种效果?怎么实现的?

        这个可以以经典的RSA加密算法为例去看一看。它其实主要是利用了数学上一些至今没有找到有效的解决办法的数学问题,如大数质因数分解,就假如给你一个1024位的数,它是两个质数相乘的结果,要你找到这两个质数,你就可以破解密文。诈一看上去感觉还可以,好像不是很难,学过编程的基础小程序不就是在100以内的数,找到它所有的因数吗,那有什么难的。但实际上,100以内的数,只是两位数,而你要破解的,不少于1024位。以计算机的计算能力,几年内无法暴力破解。因此,这两个质数也就只有持有这个密钥对的人知道。具体的RSA算法,还用到了指数运算以及取模,后面我会写博客来专门介绍一下。

        至此,现在密钥的传输问题相信你已经清楚了,对外门人来说解惑了,但对要走密码学这一行的人来说,远远不够。推荐一本入门书籍《图解密码技术》,非常简单,介绍了密码学相关的术语及相关技术内容,简单、明了,都能看懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值