导航:首页 > 文档加密 > 加密算法与保密函数

加密算法与保密函数

发布时间:2023-08-30 17:28:25

A. 关于加密、解密算法、密钥,哪位能给我举个形象的例子

加密就像你钥匙深进钥匙孔,逆时针转一下
解密就像你钥匙深进钥匙孔,顺时针转一下
密钥就像你那把钥匙上面的齿
暴力破解就像做了世界上所有可能的齿的钥匙,一把一把试。不可以理解为直接砸开。
就像商场里衣服上有个锁,如果没有钥匙,就算怎么弄开,那件衣服都没法穿了。所以就一定要有钥匙。
所以密钥叫作key(钥匙)

应该很形象了吧。

加密从数学角度就是一个像函数c=E(m,k)
输入:m是消息明文,k是密钥,
输出:c是消息密文

D是E的反函数,m'=D(c',k')
输入:c'是消息密文,k'是密钥,
输出:m'是消息明文

当c=c', k=k'时,一定有m=m'

c,m,k可以看成一个个大整数,比如c=394783579347293479382。
最简单的一个加密就是
E(m,k)=m+k
D(c,k)=c-k

B. 对称加密算法的加密算法主要有哪些

1、3DES算法

3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:

3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

3DES解密过程为:M=Dk1(EK2(Dk3(C)))

2、Blowfish算法

BlowFish算法用来加密64Bit长度的字符串。

BlowFish算法使用两个“盒”——unsignedlongpbox[18]和unsignedlongsbox[4,256]。

BlowFish算法中,有一个核心加密函数:BF_En(后文详细介绍)。该函数输入64位信息,运算后,以64位密文的形式输出。用BlowFish算法加密信息,需要两个过程:密钥预处理和信息加密。

分别说明如下:

密钥预处理:

BlowFish算法的源密钥——pbox和sbox是固定的。我们要加密一个信息,需要自己选择一个key,用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。具体的变化算法如下:

1)用sbox填充key_sbox

2)用自己选择的key8个一组地去异或pbox,用异或的结果填充key_pbox。key可以循环使用。

比如说:选的key是"abcdefghijklmn"。则异或过程为:

key_pbox[0]=pbox[0]abcdefgh;

key_pbox[1]=pbox[1]ijklmnab;

…………

…………

如此循环,直到key_pbox填充完毕。

3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1],i=0;

4)用BF_En加密替换后的key_pbox,key_pbox[i+1],用输出替代key_pbox[i+2]和key_pbox[i+3];

5)i+2,继续第4步,直到key_pbox全部被替换;

6)用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox信息加密。

信息加密就是用函数把待加密信息x分成32位的两部分:xL,xRBF_En对输入信息进行变换。

3、RC5算法

RC5是种比较新的算法,Rivest设计了RC5的一种特殊的实现方式,因此RC5算法有一个面向字的结构:RC5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。

(2)加密算法与保密函数扩展阅读:

普遍而言,有3个独立密钥的3DES(密钥选项1)的密钥长度为168位(三个56位的DES密钥),但由于中途相遇攻击,它的有效安全性仅为112位。密钥选项2将密钥长度缩短到了112位,但该选项对特定的选择明文攻击和已知明文攻击的强度较弱,因此NIST认定它只有80位的安全性。

对密钥选项1的已知最佳攻击需要约2组已知明文,2部,2次DES加密以及2位内存(该论文提到了时间和内存的其它分配方案)。

这在现在是不现实的,因此NIST认为密钥选项1可以使用到2030年。若攻击者试图在一些可能的(而不是全部的)密钥中找到正确的,有一种在内存效率上较高的攻击方法可以用每个密钥对应的少数选择明文和约2次加密操作找到2个目标密钥中的一个。

C. 加密基础知识二 非对称加密RSA算法和对称加密

上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考 RSA算法原理(二)
首字母缩写说明:E是加密(Encryption)D是解密(Decryption)N是数字(Number)。

1.随机选择两个不相等的质数p和q。
alice选择了61和53。(实际应用中,这两个质数越大,就越难破解。)

2.计算p和q的乘积n。
n = 61×53 = 3233
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。

3.计算n的欧拉函数φ(n)。称作L
根据公式φ(n) = (p-1)(q-1)
alice算出φ(3233)等于60×52,即3120。

4.随机选择一个整数e,也就是公钥当中用来加密的那个数字
条件是1< e < φ(n),且e与φ(n) 互质。
alice就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)

5.计算e对于φ(n)的模反元素d。也就是密钥当中用来解密的那个数字
所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。ed ≡ 1 (mod φ(n))
alice找到了2753,即17*2753 mode 3120 = 1

6.将n和e封装成公钥,n和d封装成私钥。
在alice的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。

上述故事中,blob为了偷偷地传输移动位数6,使用了公钥做加密,即6^17 mode 3233 = 824。alice收到824之后,进行解密,即824^2753 mod 3233 = 6。也就是说,alice成功收到了blob使用的移动位数。

再来复习一下整个流程:
p=17,q=19
n = 17 19 = 323
L = 16 18 = 144
E = 5(E需要满足以下两个条件:1<E<144,E和144互质)
D = 29(D要满足两个条件,1<D<144,D mode 144 = 1)
假设某个需要传递123,则加密后:123^5 mode 323 = 225
接收者收到225后,进行解密,225^ 29 mode 323 = 123

回顾上面的密钥生成步骤,一共出现六个数字:
p
q
n
L即φ(n)
e
d
这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。那么,有无可能在已知n和e的情况下,推导出d?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。
结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。
可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。维基网络这样写道:"对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"

然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。此外,RSA的缺点还有:
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此, 使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法

加密和解密是自古就有技术了。经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫无意义的数字苦恼,忽然灵光一闪,翻出一本厚书,将第一个数字对应页码数,第二个数字对应行数,第三个数字对应那一行的某个词。数字变成了一串非常有意义的话:
Eat the beancurd with the peanut. Taste like the ham.

这种加密方法是将原来的某种信息按照某个规律打乱。某种打乱的方式就叫做密钥(cipher code)。发出信息的人根据密钥来给信息加密,而接收信息的人利用相同的密钥,来给信息解密。 就好像一个带锁的盒子。发送信息的人将信息放到盒子里,用钥匙锁上。而接受信息的人则用相同的钥匙打开。加密和解密用的是同一个密钥,这种加密称为对称加密(symmetric encryption)。

如果一对一的话,那么两人需要交换一个密钥。一对多的话,比如总部和多个特工的通信,依然可以使用同一套密钥。 但这种情况下,对手偷到一个密钥的话,就知道所有交流的信息了。 二战中盟军的情报战成果,很多都来自于破获这种对称加密的密钥。

为了更安全,总部需要给每个特工都设计一个不同的密钥。如果是FBI这样庞大的机构,恐怕很难维护这么多的密钥。在现代社会,每个人的信用卡信息都需要加密。一一设计密钥的话,银行怕是要跪了。

对称加密的薄弱之处在于给了太多人的钥匙。如果只给特工锁,而总部保有钥匙,那就容易了。特工将信息用锁锁到盒子里,谁也打不开,除非到总部用唯一的一把钥匙打开。只是这样的话,特工每次出门都要带上许多锁,太容易被识破身份了。总部老大想了想,干脆就把造锁的技术公开了。特工,或者任何其它人,可以就地取材,按照图纸造锁,但无法根据图纸造出钥匙。钥匙只有总部的那一把。

上面的关键是锁和钥匙工艺不同。知道了锁,并不能知道钥匙。这样,银行可以将“造锁”的方法公布给所有用户。 每个用户可以用锁来加密自己的信用卡信息。即使被别人窃听到,也不用担心:只有银行才有钥匙呢!这样一种加密算法叫做非对称加密(asymmetric encryption)。非对称加密的经典算法是RSA算法。它来自于数论与计算机计数的奇妙结合。

1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密模式被称为"非对称加密算法"。

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

1.能“撞”上的保险箱(非对称/公钥加密体制,Asymmetric / Public Key Encryption)

数据加密解密和门锁很像。最开始的时候,人们只想到了那种只能用钥匙“锁”数据的锁。如果在自己的电脑上自己加密数据,当然可以用最开始这种门锁的形式啦,方便快捷,简单易用有木有。

但是我们现在是通信时代啊,双方都想做安全的通信怎么办呢?如果也用这种方法,通信就好像互相发送密码保险箱一样…而且双方必须都有钥匙才能进行加密和解密。也就是说,两个人都拿着保险箱的钥匙,你把数据放进去,用钥匙锁上发给我。我用同样的钥匙把保险箱打开,再把我的数据锁进保险箱,发送给你。

这样看起来好像没什么问题。但是,这里面 最大的问题是:我们两个怎么弄到同一个保险箱的同一个钥匙呢? 好像仅有的办法就是我们两个一起去买个保险箱,然后一人拿一把钥匙,以后就用这个保险箱了。可是,现代通信社会,绝大多数情况下别说一起去买保险箱了,连见个面都难,这怎么办啊?

于是,人们想到了“撞门”的方法。我这有个可以“撞上”的保险箱,你那里自己也买一个这样的保险箱。通信最开始,我把保险箱打开,就这么开着把保险箱发给你。你把数据放进去以后,把保险箱“撞”上发给我。撞上以后,除了我以外,谁都打不开保险箱了。这就是RSA了,公开的保险箱就是公钥,但是我有私钥,我才能打开。

2.数字签名
这种锁看起来好像很不错,但是锁在运输的过程中有这么一个严重的问题:你怎么确定你收到的开着的保险箱就是我发来的呢?对于一个聪明人,他完全可以这么干:
(a)装作运输工人。我现在把我开着的保险箱运给对方。运输工人自己也弄这么一个保险箱,运输的时候把保险箱换成他做的。
(b)对方收到保险箱后,没法知道这个保险箱是我最初发过去的,还是运输工人替换的。对方把数据放进去,把保险箱撞上。
(c)运输工人往回运的时候,用自己的钥匙打开自己的保险箱,把数据拿走。然后复印也好,伪造也好,弄出一份数据,把这份数据放进我的保险箱,撞上,然后发给我。
从我的角度,从对方的角度,都会觉得这数据传输过程没问题。但是,运输工人成功拿到了数据,整个过程还是不安全的,大概的过程是这样:

这怎么办啊?这个问题的本质原因是,人们没办法获知,保险箱到底是“我”做的,还是运输工人做的。那干脆,我们都别做保险箱了,让权威机构做保险箱,然后在每个保险箱上用特殊的工具刻上一个编号。对方收到保险箱的时候,在权威机构的“公告栏”上查一下编号,要是和保险箱上的编号一样,我就知道这个保险箱是“我”的,就安心把数据放进去。大概过程是这样的:

如何做出刻上编号,而且编号没法修改的保险箱呢?这涉及到了公钥体制中的另一个问题:数字签名。
要知道,刻字这种事情吧,谁都能干,所以想做出只能自己刻字,还没法让别人修改的保险箱确实有点难度。那么怎么办呢?这其实困扰了人们很长的时间。直到有一天,人们发现:我们不一定非要在保险箱上刻规规矩矩的字,我们干脆在保险箱上刻手写名字好了。而且,刻字有点麻烦,干脆我们在上面弄张纸,让人直接在上面写,简单不费事。具体做法是,我们在保险箱上嵌进去一张纸,然后每个出产的保险箱都让权威机构的CEO签上自己的名字。然后,CEO把自己的签名公开在权威机构的“公告栏”上面。比如这个CEO就叫“学酥”,那么整个流程差不多是这个样子:

这个方法的本质原理是,每个人都能够通过笔迹看出保险箱上的字是不是学酥CEO签的。但是呢,这个字体是学酥CEO唯一的字体。别人很难模仿。如果模仿我们就能自己分辨出来了。要是实在分辨不出来呢,我们就请一个笔迹专家来分辨。这不是很好嘛。这个在密码学上就是数字签名。

上面这个签字的方法虽然好,但是还有一个比较蛋疼的问题。因为签字的样子是公开的,一个聪明人可以把公开的签字影印一份,自己造个保险箱,然后把这个影印的字也嵌进去。这样一来,这个聪明人也可以造一个相同签字的保险箱了。解决这个问题一个非常简单的方法就是在看保险箱上的签名时,不光看字体本身,还要看字体是不是和公开的字体完全一样。要是完全一样,就可以考虑这个签名可能是影印出来的。甚至,还要考察字体是不是和其他保险柜上的字体一模一样。因为聪明人为了欺骗大家,可能不影印公开的签名,而影印其他保险箱上的签名。这种解决方法虽然简单,但是验证签名的时候麻烦了一些。麻烦的地方在于我不仅需要对比保险箱上的签名是否与公开的笔迹一样,还需要对比得到的签名是否与公开的笔迹完全一样,乃至是否和所有发布的保险箱上的签名完全一样。有没有什么更好的方法呢?

当然有,人们想到了一个比较好的方法。那就是,学酥CEO签字的时候吧,不光把名字签上,还得带上签字得日期,或者带上这个保险箱的编号。这样一来,每一个保险箱上的签字就唯一了,这个签字是学酥CEO的签名+学酥CEO写上的时间或者编号。这样一来,就算有人伪造,也只能伪造用过的保险箱。这个问题就彻底解决了。这个过程大概是这么个样子:

3 造价问题(密钥封装机制,Key Encapsulation Mechanism)
解决了上面的各种问题,我们要考虑考虑成本了… 这种能“撞”门的保险箱虽然好,但是这种锁造价一般来说要比普通的锁要高,而且锁生产时间也会变长。在密码学中,对于同样“结实”的锁,能“撞”门的锁的造价一般来说是普通锁的上千倍。同时,能“撞”门的锁一般来说只能安装在小的保险柜里面。毕竟,这么复杂的锁,装起来很费事啊!而普通锁安装在多大的保险柜上面都可以呢。如果两个人想传输大量数据的话,用一个大的保险柜比用一堆小的保险柜慢慢传要好的多呀。怎么解决这个问题呢?人们又想出了一个非常棒的方法:我们把两种锁结合起来。能“撞”上的保险柜里面放一个普通锁的钥匙。然后造一个用普通的保险柜来锁大量的数据。这样一来,我们相当于用能“撞”上的保险柜发一个钥匙过去。对方收到两个保险柜后,先用自己的钥匙把小保险柜打开,取出钥匙。然后在用这个钥匙开大的保险柜。这样做更棒的一个地方在于,既然对方得到了一个钥匙,后续再通信的时候,我们就不再需要能“撞”上的保险柜了啊,在以后一定时间内就用普通保险柜就好了,方便快捷嘛。

以下参考 数字签名、数字证书、SSL、https是什么关系?
4.数字签名(Digital Signature)
数据在浏览器和服务器之间传输时,有可能在传输过程中被冒充的盗贼把内容替换了,那么如何保证数据是真实服务器发送的而不被调包呢,同时如何保证传输的数据没有被人篡改呢,要解决这两个问题就必须用到数字签名,数字签名就如同日常生活的中的签名一样,一旦在合同书上落下了你的大名,从法律意义上就确定是你本人签的字儿,这是任何人都没法仿造的,因为这是你专有的手迹,任何人是造不出来的。那么在计算机中的数字签名怎么回事呢?数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发送的数据有没有被篡改过,它就干这两件事,是非对称加密的一种应用场景。不过他是反过来用私钥来加密,通过与之配对的公钥来解密。
第一步:服务端把报文经过Hash处理后生成摘要信息Digest,摘要信息使用私钥private-key加密之后就生成签名,服务器把签名连同报文一起发送给客户端。
第二步:客户端接收到数据后,把签名提取出来用public-key解密,如果能正常的解密出来Digest2,那么就能确认是对方发的。
第三步:客户端把报文Text提取出来做同样的Hash处理,得到的摘要信息Digest1,再与之前解密出来的Digist2对比,如果两者相等,就表示内容没有被篡改,否则内容就是被人改过了。因为只要文本内容哪怕有任何一点点改动都会Hash出一个完全不一样的摘要信息出来。

5.数字证书(Certificate Authority)
数字证书简称CA,它由权威机构给某网站颁发的一种认可凭证,这个凭证是被大家(浏览器)所认可的,为什么需要用数字证书呢,难道有了数字签名还不够安全吗?有这样一种情况,就是浏览器无法确定所有的真实服务器是不是真的是真实的,举一个简单的例子:A厂家给你们家安装锁,同时把钥匙也交给你,只要钥匙能打开锁,你就可以确定钥匙和锁是配对的,如果有人把钥匙换了或者把锁换了,你是打不开门的,你就知道肯定被窃取了,但是如果有人把锁和钥匙替换成另一套表面看起来差不多的,但质量差很多的,虽然钥匙和锁配套,但是你却不能确定这是否真的是A厂家给你的,那么这时候,你可以找质检部门来检验一下,这套锁是不是真的来自于A厂家,质检部门是权威机构,他说的话是可以被公众认可的(呵呵)。
同样的, 因为如果有人(张三)用自己的公钥把真实服务器发送给浏览器的公钥替换了,于是张三用自己的私钥执行相同的步骤对文本Hash、数字签名,最后得到的结果都没什么问题,但事实上浏览器看到的东西却不是真实服务器给的,而是被张三从里到外(公钥到私钥)换了一通。那么如何保证你现在使用的公钥就是真实服务器发给你的呢?我们就用数字证书来解决这个问题。数字证书一般由数字证书认证机构(Certificate Authority)颁发,证书里面包含了真实服务器的公钥和网站的一些其他信息,数字证书机构用自己的私钥加密后发给浏览器,浏览器使用数字证书机构的公钥解密后得到真实服务器的公钥。这个过程是建立在被大家所认可的证书机构之上得到的公钥,所以这是一种安全的方式。

常见的对称加密算法有DES、3DES、AES、RC5、RC6。非对称加密算法应用非常广泛,如SSH,
HTTPS, TLS,电子证书,电子签名,电子身份证等等。
参考 DES/3DES/AES区别

D. 密码算法的密码学

(1) 发送者和接收者
假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。
(2) 消息和加密
消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。
明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。
密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:
E(M)=C.
相反地,解密函数D作用于C产生M
D(C)=M.
先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:
D(E(M))=M
(3) 鉴别、完整性和抗抵赖
除了提供机密性外,密码学通常有其它的作用:.
(a) 鉴别
消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。
(b) 完整性检验
消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。
(c) 抗抵赖
发送者事后不可能虚假地否认他发送的消息。
(4) 算法和密钥
密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)
如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。
但是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。
尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。
现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成:
EK(M)=C
DK(C)=M.
这些函数具有下面的特性:
DK(EK(M))=M.
有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:
EK1(M)=C
DK2(C)=M
DK2 (EK1(M))=M
所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。
密码系统由算法、以及所有可能的明文、密文和密钥组成的。
基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍: 对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。
对称算法的加密和解密表示为:
EK(M)=C
DK(C)=M
对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。 公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。
用公开密钥K加密表示为
EK(M)=C.
虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为:
DK(C)=M
有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:
EK(M)=C
DK(C)=M
当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。 单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。
输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性:
(1) 给定 M ,很容易计算 h ;
(2) 给定 h ,根据 H(M) = h 计算 M 很难 ;
(3) 给定 M ,要找到另一个消息 M‘ 并满足 H(M) = H(M’) 很难。
在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:
要找出两个随机的消息 M 和 M‘,使 H(M) = H(M’) 满足很难。
由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 。
如 SHA 散列算法用于数字签名协议 DSA中。 提到数字签名就离不开公开密码系统和散列技术。
有几种公钥算法能用作数字签名。在一些算法中,例如RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 。
基本协议是简单的 :
(1) A 用她的私钥对文件加密,从而对文件签名。
(2) A 将签名的文件传给B。
(3) B用A的公钥解密文件,从而验证签名。
这个协议中,只需要证明A的公钥的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。
这个协议也满足以下特征:
(1) 签名是可信的。当B用A的公钥验证信息时,他知道是由A签名的。
(2) 签名是不可伪造的。只有A知道她的私钥。
(3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。
(4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证。
(5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。 加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。
对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。
不对称加密算法 不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。
不可逆加密算法 的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。

E. 十大常见密码加密方式

一、密钥散列

采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘要的160位(20字节)散列值。MD5相对SHA1来说,安全性较低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。

二、对称加密

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

三、非对称加密

非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

四、数字签名

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。

五、直接明文保存

早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。

六、使用MD5、SHA1等单向HASH算法保护密码

使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

七、特殊的单向HASH算法

由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。

八、PBKDF2

该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。

九、BCrypt

BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线破解的威胁模型分析中表现并不突出。

十、SCrypt

SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于破解。

F. md5是什么

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。

1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

用于密码管理

当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。

为了增加安全性,有必要对数据库中需要保密的信息进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也不能得到原来的密码信息。MD5算法可以很好地解决这个问题,因为它可以将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文相同的情况下。

才能等到相同的密文,并且这个算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。

G. 用于文件加密的算法有哪些,以及它们的原理

MD5全称"message-digest algorithm 5"(信息-摘要算法)。

90年代初由MIT计算机科学实验室和RSA Data Security Inc联合开发。

MD5算法采用128位加密方式,即使一台计算机每秒可尝试10亿条明文,要跑出原始明文也要1022年。在802.1X认证中,一直使用此算法。

加密算法之二---ELGamal

ELGamal算法是一种较为常见的加密算法,他基于1984年提出的公钥密码体制和椭圆曲线加密体系。即能用于数据加密,又能用于数字签名,起安全性依赖于计算有限领域上离散对数这一数学难题。

着名的DSS和Schnorr和美国国家标准X9.30-199X中ELGamal为唯一认可加密方式。并且椭圆曲线密码加密体系增强了ELGamal算法的安全性。

ELGamal在加密过程中,生成的密文长度是明文的两倍。且每次加密后都会在密文中生成一个随即数K。

加密算法之三---BlowFish

BlowFish算法由着名的密码学专家部鲁斯·施耐尔所开发,是一个基于64位分组及可变密钥长度[32-448位]的分组密码算法。

BlowFish算法的核心加密函数名为BF_En,为一种对称算法,加密强度不够。

加密算法之四---SHA

SHA(即Secure Hash Algorithm,安全散列算法)是一种常用的数据加密算法,由美国国家标准与技术局于1993年做为联邦信息处理标准公布,先版本SHA-1,SHA-2。

SHA算法与MD5类似,同样按2bit数据块为单位来处理输入,但它能产生160bit的信息摘要,具有比MD5更强的安全性。

SHA收到一段明文,然后以不可逆方式将它转为一段密文,该算法被广泛运用于数字签名及电子商务交易的身份认证中。(

H. 加密方式有几种

加密方式的种类:

1、MD5

一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。

2、对称加密

对称加密采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

3、非对称加密

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。

如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

(8)加密算法与保密函数扩展阅读

非对称加密工作过程

1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。

同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

阅读全文

与加密算法与保密函数相关的资料

热点内容
php怎么转换页面 浏览:544
我的世界买了服务器之后怎么开服 浏览:826
r1234yf汽车空调压缩机 浏览:143
ftp服务器地址栏 浏览:898
linux图形分区 浏览:963
安徽到辽宁源码 浏览:575
libs安卓的文件夹叫什么 浏览:869
生意圈app是什么意思 浏览:395
linuxarcgisserver 浏览:234
加密pdf怎么修改文件 浏览:138
红米刷机无命令怎么办 浏览:356
啥叫美国谷歌外包程序员 浏览:260
云服务器管家婆 浏览:440
发邮件命令 浏览:354
程序员好做吗工作好吗 浏览:886
云电脑服务器维护一个月多少钱 浏览:882
有没有什么app数学题型较多 浏览:341
政策pdf 浏览:295
有什么好玩的文娱app 浏览:811
python教学合集 浏览:959