① 现代密码学介绍(一)
1.Kerckhoff's principle:
加密方法不必要求是保密的,它肯定会很容易就落入敌人的手中。安全性仅仅依靠key的安全性。
支持上述principle的三个基本理论:
(1)无论对于哪一方来说,保持一个短的key的安全性比保持加密算法的安全性要简单得多。
(2)当信息被暴露时,改变一个key比替换一个加密模式要简单。
(3)用户们一起使用相同的加密算法好过用户自己使用它们自己的加密算法。
2.通过利用英文的统计模型,可以攻击单字母替换密码:(暴力攻击需要26次)
(1)如果e映射为D,则每个在明文中出现的e都会在密文中显示为D。
(2)每个英文字母出现的频率分布是已知的。
3.移位密码的改进版攻击方法:
(1)将26个字母与数字0~25一一对应,设pi为第i个字母出现的频率(确定的),0<= pi <=1。由Figure 1.3 给出以下式子:
(2)得到一些密文后,设qi为第i个字母在密文中出现的频率(第i个字母出现的次数除以密文长度)。
(3)设key为k,则pi=
,因为第i个字母被映射到第(i+k)个字母。
(4)设 j ∈{0,...,25} ,对于 j 可能取到的这26个值,分别计算下列式子:
(5)当找到Ik = 0.065,则可得到key的值k。
4.破解多字母移位密码(维吉尼亚密码): (当key长度为t时,暴力攻击需要 26t 次)
吉尼亚密码分解后实则就是多个凯撒密码,只要知道密钥的长度,我们就可以将其分解。
如密文为:ABCDEFGHIJKLMN
如果我们知道密钥长度为3,就可将其分解为三组:
组1:A D G J M (密文中第 0, 3,6,9,12 个字母)
组2:B E H K N (密文中第 1,4,7,10,13 个字母)
组3:C F I L (密文中第 2,5,8,11 个字母)
分解后每组就是一个凯撒密码,即组内的位移量是一致的,对每一组即可用频度分析法来解密。
所以破解维吉尼亚密码的关键就是确定密钥的长度。
当不知道key的长度时。
(1)设key的长度为t,以下字符有相同的位移量
(2)设qi为第i个字母在上面字符串中出现的频率(第i个字母出现的次数除以字符串长度)。
(3)设位移量为j,则
(4)设
(左边这个变量包含了我们要求的key的长度t ,我们从1开始试t的值)
由(1)我们可知
有相同的位移量。接着我们计算下列式子,找出符合式子的t值:
(5)当T不是key的长度t时,则我们期望每个qi的频率都是1/26
※ 维吉尼亚密码、单字母替换密码比对移位密码的攻击需要更长的密文。
5.如今,schemes(方案)被以一种更系统的方式发展和分析,并最终用来给出严格proof(证据)证明给出的construction(结构)是安全的。为了清晰表达这些proofs,我们首先要正式定义“安全”的含义,结果是,大多数密码证明依赖于目前未经证实的假设,这些假设关于某些数学问题的算法难度。
6.比起古典密码学,现代密码学更强调3个规则(principles):定义、假设和证明(definitions, assumptions, and proofs)。
(1)Formal definitions:给出两个准确的描述:在这个范围内威胁有哪些、什么样的安全保障是被需要的。这样,definitions能够帮助引导加密方案(cryptographic schemes)的设计。在合适的definition下,我们可以研究一个被推荐的方案去看它是否完成需求保障;某些情况下,我们还可以通过展示满足definition证明一个给出的结构的安全。
一个满足更弱定义的方案可能会比满足更强定义的方案更有效。
(2)一个安全定义有两个元素:一个安全保障(从攻击者的观点来看,什么对该方案(scheme)构成成功的攻击,即scheme旨在预防攻击者的行动);一个威胁的模型(描述敌手的能力)。
(3)威胁模型假定攻击者拥有的能力,但对敌手使用的策略没有限制,不用假定敌手是怎么使用它的能力的。
(4)威胁模型,按顺序,攻击者的能力增加:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击。
(5)Precise Assumptions:安全证明(proofs)经常依赖于假设(assumptions)。
(6)如果被视为建筑块的基本假设,作为方案安全证明的部分是明确的,接着我们只需检查要求的假设是否被新弱点影响。
(7)Proofs and Security: 严格的证明:在某些特定的假设(assumption)下,一个构造(construction)满足给出的定义(definition)。
② 现代密码学加密原理
密码学是在区块链技术中承担着非常重要的角色,但其实,在互联网中,也大量的使用着密码学的技术,本文将介绍现代密码学中的早期加密方法,这将有助于我们理解区块链中的复杂算法。
第二次大战之后,从军方演化而来的互联网慢慢的进入了寻常百姓家,我们能够将一切事物都电子化处理,交易也不例外,于是电子银行也出现了,所有交易都可以通过网络进行。随着互联网用户越来越多,新的问题产生了,加密需要双方共享一个秘密的随机数,也就是秘钥,但从未谋面的两个人,如何就此共享密钥达成一致,而又不让第三方监听这知道呢?这将是现代密码学的目标。
1976年,维特菲尔德和马丁赫尔曼找到了一种巧妙的解决方法,让我们用颜色为比喻来讲解该技巧是如何实现的:
首先,明确我们的目标,发送者和接受者就秘密颜色达成一致,而不让窃听者知道,于是需要采用一种技巧,该技巧基于两点:
一、混合两种颜色得到第三种颜色很容易;
二、得到这种混合色后,想在此基础上知道原来的颜色就很难了, 这就是锁的原理。
朝一个方向容易,朝反方向难,这被称作是单向函数。解决方案是这样的,首先,他们公开对某种颜色达成一致,假设是黄色,然后发送者和接收者随机选取私有颜色,混到公共的黄色中,从而掩饰掉他们的私有颜色,并且将混合颜色发给接收者,接收者知道自己的私有颜色,并将它的混合颜色发给发送者,
然后就是技巧的关键了,发送者和接收者将各自私有颜色加入到另一个人的混合色中,然后得到一种共享秘密颜色,此时,窃听者无法确定这种颜色,她必须有一种私有颜色才能确定,技巧就是这样,对密码学的世界中, 我们需要一个数值的运算过程,这个过程向单一方向很容易,反方向会很难。
我们需要一种朝一方向易,反方向难的数值过程,于是密码学家找到了模算数,也就是取余的函数,(比如46除12的余数是10)。
假设我们考虑用质数做模型,比如17,我们找到17的一个原根,这里是3,它具有如下重要性质,取不同幂次时,结果会在时钟上均匀分布,3是一个生成元,取3的X次方,结果会等可能地出现在0和17中间任何整数上。
但相反的过程就难了,比如给定12,要求这是3的多少次方,这被称为离散对数问题,这样我们就有了单向函数,一个方向计算很容易,但反方向就很难了,已知12,我们只能采用试错法,求出匹配的质数。
这有多难呢?如果数字很小,这还很容易,但模数是长达数百位的质数,那么,想解密是不切实际的,即便借助世界上最强大的计算机,要遍历所有可能的情况,也需要上千年的时间,单向函数的强度取决于反向过程所需要的时间。
解决方案是这样的,首先,发送者和接收者公开质模数和生成元,这里的例子中也就是17和3,然后发送者选择一个私有的随机数,比如15,计算315 mod 17(结果为6),然后公开将此结果发送给接收者,之后接收者选择自己的私有随机数,比如13,计算313mod 17(结果为12),然后公开将此结果发送给对方。
关键在于,将接收者的公开结果,取她的私有数字次方,以获得共享密钥,这里是10,接收者将发送者的公开结果,取她的私有数字次方,结果得到相同的共享密钥,可能大家还不好理解,但他们实际上进行了相同的运算。
考虑发送者,她从接收者接收到的是12,来自313 mod 17,所以她的计算实际上是3∧13∧15 mod 17,而接收者,他从发送者那里接收6,来自315mod17,所以他的计算实际上是3∧15∧13mod17,两种计算结果是相同的,只是指数的顺序不同,调换指数顺序,结果不会改变,他们的结果都是,3取两人私有数字次幂,没有这些私有数字,15或13,第三方将无法求出结果。
第三方会被困在离散对数问题之中,数字足够大时,实践中,她在合理时限内,几乎不可能破解,这就解决了交换密钥的问题,这可以同伪随机数生成器结合使用,为从未谋面的人提供通信加密。
现在区块链常用的算法,如sha256,都是继承单向函数的设计思维,一个方向计算容易,反过来几乎不能破解,来保证安全。
③ 现代密码学的仿射变换中的解密算法怎么求模,(1/7)*(11-21)(mod 26)=6是怎么求出来的的
(11-21)/7
7*m+10(mod26)
7*6+10(mod26) = 2
m=6
④ 密码算法的密码学
(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:安全杂乱信息标准)等。
⑤ NJUPT《 现代密码学 》
(有些计算错误懒得改了,方法都是对的)
2) Caesar 密码 :26个英文字母与整数0~25对应,Caesar 密码密钥数量过少。
将Caesar 密码一般化,取任意的整数k作为密钥:
加密变换:c = E(k,p) = (p+k)(mod26)
解密变换:p = D(k,c) = (c-k)(mod26)
一般单表替代密码算法特点:
① 密钥空间K很大,|K| = 26!
② 移位密码是替换密码的一个特例,它仅含26个置换做为密钥空间。
③ 密钥n不便记忆,通常会采用密钥短语密码:选用英文短语或单词串作为密钥,去掉其中重复的字母,其它字母依次写于此字母串后,就可构造出一个字母替代表。
3) 仿射密码 :一种线性变换。仿射密码的明文空间和密文空间与移位密码相同,但密钥空间为 K = {(k1,k2)|k1,k2∈Z₂₆,gcd(k1,26) = 1};
对任意 m∈M,c∈C,k = (k1,k2)∈K,定义加密变换和解密变换为:
c = ek(m) = k1m+k2 (mod26)
m = dk(c) = k1^-1(c-k2) (mod26)
⑥ 区块链中现代密码学
1983年 - David Chaum描述的盲签
1997年 - Adam Back发明的HashCash(工作证明制度的一个例子)
2001年 - Ron Rivest,Adi Shamir和Yael Tauman向加密社区提出了环签名
2004年 - Patrick P. Tsang和Victor K.提出使用环签名系统进行投票和电子现金;
2008年 - 由Satoshi Nakamoto出版的Bitcoin白皮书
2011年 - 比特币系统中的匿名分析,Fergal Reid和Martin Harrigan
2012 - 目的地址比特币匿名(CryptoNote中的一次性地址)。
安全多方计算起源于1982年姚期智的百万富翁问题。后来Oded Goldreich有比较细致系统的论述。
姚氏百万富翁问题是由华裔计算机科学家、图灵奖获得者姚启智教授首先提出的。该问题表述为:两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方知道自己财富的任何信息。该问题有一些实际应用:假设Alice希望向Bob购买一些商品,但她愿意支付的最高金额为x元;Bob希望的最低卖出价为y元。Alice和Bob都非常希望知道x与y哪个大。如果x>y,他们都可以开始讨价还价;如果z<y,他们就不用浪费口舌。但他们都不想告诉对方自己的出价,以免自己在讨价还价中处于不利地位。
该方案用于对两个数进行比较,以确定哪一个较大。Alice知道一个整数i;Bob知道一个整数j, Alice与B0b希望知道究竟i>=j还是j>i,但都不想让对方知道自己的数。为简单起见,假设j与i的范围为[1,100】。Bob有一个公开密钥Eb和私有密钥Db。
安全多方计算(Secure Multi-Party Computation)的研究主要是针对无可信第三方的情况下, 如何安全地计算一个约定函数的问题. 安全多方计算在电子选举、电子投票、电子拍卖、秘密共享、门限签名等场景中有着重要的作用。
同态加密(Homomorphic Encryption)是很久以前密码学界就提出来的一个Open Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos就以银行为应用背景提出了这个概念[RAD78]。对,你没有看错,Ron Rivest和Leonard Adleman分别就是着名的RSA算法中的R和A。
什么是同态加密?提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的直观定义最好:A way to delegate processing of your data, without giving away access to it.
这是什么意思呢?一般的加密方案关注的都是数据存储安全。即,我要给其他人发个加密的东西,或者要在计算机或者其他服务器上存一个东西,我要对数据进行加密后在发送或者存储。没有密钥的用户,不可能从加密结果中得到有关原始数据的任何信息。只有拥有密钥的用户才能够正确解密,得到原始的内容。我们注意到,这个过程中用户是不能对加密结果做任何操作的,只能进行存储、传输。对加密结果做任何操作,都将会导致错误的解密,甚至解密失败。
同态加密方案最有趣的地方在于,其关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。也就是说,其他人可以对加密数据进行处理,但是处理过程不会泄露任何原始内容。同时,拥有密钥的用户对处理过的数据进行解密后,得到的正好是处理后的结果。
有点抽象?我们举个实际生活中的例子。有个叫Alice的用户买到了一大块金子,她想让工人把这块金子打造成一个项链。但是工人在打造的过程中有可能会偷金子啊,毕竟就是一克金子也值很多钱的说… 因此能不能有一种方法,让工人可以对金块进行加工(delegate processing of your data),但是不能得到任何金子(without giving away access to it)?当然有办法啦,Alice可以这么做:Alice将金子锁在一个密闭的盒子里面,这个盒子安装了一个手套。工人可以带着这个手套,对盒子内部的金子进行处理。但是盒子是锁着的,所以工人不仅拿不到金块,连处理过程中掉下的任何金子都拿不到。加工完成后。Alice拿回这个盒子,把锁打开,就得到了金子。
这里面的对应关系是:盒子:加密算法盒子上的锁:用户密钥将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理开锁:对结果进行解密,直接得到处理后的结果同态加密哪里能用?这几年不是提了个云计算的概念嘛。同态加密几乎就是为云计算而量身打造的!我们考虑下面的情景:一个用户想要处理一个数据,但是他的计算机计算能力较弱。这个用户可以使用云计算的概念,让云来帮助他进行处理而得到结果。但是如果直接将数据交给云,无法保证安全性啊!于是,他可以使用同态加密,然后让云来对加密数据进行直接处理,并将处理结果返回给他。这样一来:用户向云服务商付款,得到了处理的结果;云服务商挣到了费用,并在不知道用户数据的前提下正确处理了数据;
聚合签名由Boneh等人提出,主要是通过聚合多个签名为一个签名,来提高签名与验证的效率。要对多个用户的数据进行签名,聚合签名能够极大地降低签名计算复杂度。CL就是聚合签名。
零知识证明过程有两个参与方,一方叫证明者,一方叫验证者。证明者掌握着某个秘密,他想让验证者相信他掌握着秘密,但是又不想泄漏这个秘密给验证者。
双方按照一个协议,通过一系列交互,最终验证者会得出一个明确的结论,证明者是或不掌握这个秘密。
对于比特币的例子,一笔转帐交易合法与否,其实只要证明三件事:
发送的钱属于发送交易的人
发送者发送的金额等于接收者收到金额
发送者的钱确实被销毁了
整个证明过程中,矿工其实并不关心具体花掉了多少钱,发送者具体是谁,接受者具体是谁。矿工只关心系统的钱是不是守恒的。
zcash 就是用这个思路实现了隐私交易。
零知识证明的三条性质对应:
(1)完备性。如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。
(2)合理性。没有人能够假冒证明方,使这个证明成功。
(3)零知识性。证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。
只有环成员,没有管理者,不需要环成员之间的合作,签名者利用自己的私钥和集合中其他成员的公钥就能独立的进行签名,不需要其他人的帮助,集合中的其他成员可能不知道自己被包含在了其中。
环签名可以被用作成一种泄露秘密的方式,例如,可以使用环形签名来提供来自“白宫高级官员”的匿名签名,而不会透露哪个官员签署了该消息。 环签名适用于此应用程序,因为环签名的匿名性不能被撤销,并且因为用于环签名的组可以被即兴创建。
1)密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)
2)签名。签名者用自己的私钥和任意n个环成员的公钥为消息m生成签名a
3)签名验证。签名者根据环签名和消息m,验证签名是否是环中成员所签。如果有效就接收,如果无效就丢弃。
群签名的一般流程
盲数字签名(Blind Signature)简称盲签名——是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。1982年大卫·乔姆首先提出了盲签名的概念。盲签名因为具有盲性这一特点,可以有效保护所签署消息的具体内容,所以在电子商务和电子选举等领域有着广泛的应用。
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
所谓盲签名,就是先将隐蔽的文件放进信封里,而除去盲因子的过程就是打开这个信封,当文件在一个信封中时,任何人不能读它。对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
一般来说,一个好的盲签名应该具有以下的性质:
不可伪造性。除了签名者本人外,任何人都不能以他的名义生成有效的盲签名。这是一条最基本的性质。
不可抵赖性。签名者一旦签署了某个消息,他无法否认自己对消息的签名。
盲性。签名者虽然对某个消息进行了签名,但他不可能得到消息的具体内容。
不可跟踪性。一旦消息的签名公开后,签名者不能确定自己何时签署的这条消息。
满足上面几条性质的盲签名,被认为是安全的。这四条性质既是我们设计盲签名所应遵循的标准,又是我们判断盲签名性能优劣的根据。
另外,方案的可操作性和实现的效率也是我们设计盲签名时必须考虑的重要
因素。一个盲签名的可操作性和实现速度取决于以下几个方面:
1,密钥的长度;
2,盲签名的长度;
3,盲签名的算法和验证算法。
盲签名具体步骤
1,接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
2,经签名者签名后再发给接收者。
3,接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。
4,这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。
⑦ 什么是对称密码和非对密码,分析这两种密码体系的特点和应用领域
一、对称密码
1、定义:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
2、特点:算法公开、计算量小、加密速度快、加密效率高。
3、应用领域:由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。
二、非对密码
1、定义:非对称密码指的是非对称密码体制中使用的密码。
2、特点:
(1)是加密密钥和解密密钥不同 ,并且难以互推 。
(2)是有一个密钥是公开的 ,即公钥 ,而另一个密钥是保密的 ,即私钥。
3、应用领域:很好的解决了密钥的分发和管理的问题 ,并且它还能够实现数字签名。
(7)现代密码学的算法扩展阅读
对称加密算法特征
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦