隐私计算加密技术基础系列-Diffie–Hellman key exchange

1 密码学

1.1 背景

隐私计算(Privacy-preserving computation)是指在保证数据提供方不泄露原始数据的前提下,对数据进行分析计算的一系列信息技术,保障数据在流通与融合过程中的可用不可见。 Gartner发布的2021年前沿科技战略趋势中,将隐私计算(其称为隐私增强计算)列为未来几年科技发展的九大趋势之一。 (数据流通需求推动隐私计算势头火热) 但仍存在诸多阻碍。

2021年被称为隐私计算的元年,这门技术是门综合性非常强的领域,涉及到众多方向,比如密码学、数学、大数据、实时计算、高性能计算、分布式、传统机器学习框架与算法,深度学习框架与算法等等。本系列文章主要介绍下隐私计算使用到的相关密码学的知识。

1.2 密码学简介

密码学在整个人类的历史进程中都有着重要的地位,涵盖了人类活动的方方面面。比如在谍战片中我们经常看到地下工作者使用加密的报文传递重要的情报,比如在互联网冲浪的时候TLS/SSL也在保障我们的信息安全,可以说密码学对人类的影响和作用是深远的,很难想象没有密码学保护的日子是什么样的!那么究竟什么是密码学?如何准确定义密码学习呢?本系列文章将会进行相对详尽的介绍,欢迎大家观看。

首先,密码学的精准定义还是引用下权威机构,以下内容来自百度百科:

密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。

密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

密码学一开始的功能是在有恶意攻击者存在的环境下,保护双方通信安全,现在是用来保护信息安全的核心技术。

现代信息安全的基本要求:

  • 信息的保密性 Confidentiality:防止信息泄漏给未经授权的人(加密解密技术)
  • 信息的完整性 Integrity:防止信息被未经授权的篡改(消息认证码,数字签名)
  • 认证性 Authentication:保证信息来自正确的发送者(消息认证码,数字签名)
  • 不可否认性 Non-repudiation:保证发送者不能否认他们已发送的消息(数字签名)

1.3 密码学术语

密码学

  • 密钥:分为加密密钥和解密密钥。
  • 明文:没有进行加密,能够直接代表原文含义的信息。
  • 密文:经过加密处理处理之后,隐藏原文含义的信息。
  • 加密:将明文转换成密文的实施过程。
  • 解密:将密文转换成明文的实施过程。
  • 密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。
  • 加密(encryption)算法:将普通信息(明文,plaintext)转换成难以理解的资料(密文,ciphertext)的过程;
  • 解密(decryption)算法则是其相反的过程:由密文转换回明文;加解密包含了这两种算法,一般加密即同时指称加密(encrypt或encipher)与解密(decrypt或decipher)的技术。

加解密的具体运作由两部分决定:

一个是算法,另一个是密钥。密钥是一个用于加解密算法的秘密参数,通常只有通讯者拥有。

1.4 现代密码学常见的算法流派

以时间划分,1976 年以前的密码算法都属于古典密码学,基本使用在军事机密和外交领域,它的特点就是加解密过程简单,一般用手工或机械就可以完成,古典密码学现在已经很少使用了,下面是一个古典加密的密码本,提供一对一的映射变换,主要拥有这个密码本,就可以轻易的通过手工的方式进行信息加密与解密。

古典密码学

现代密码学中常见的加密算法,大致可以分为如下几种:

  1. 散列算法:MD5算法、Sha系列算法;
  2. 对称加密:DES、3DES、RC2、RC4、AES等;
  3. 非对称算法:RSA、ECC等;

本系列文章将会重点描述下非对称加密即公钥加密的开山之作Diffie–Hellman key exchange。本文内容涉及到数学里面的数论相关知识,针对加密算法会用到的知识,本章会做些适当的介绍,对数论感兴趣的同学可以查阅相关《数论》书籍进行精进,里面推导如果有不严谨的地方,欢迎各位同学帮忙指正。

2 数论基础

在正式介绍RSA算法之前,由于该算法需要较多的数学知识,正所谓“磨刀不误砍柴工,万丈高楼平地起”,所以按照如下的步骤进行讲解。

首先,会介绍下数论的相关的基础知识,主要包含质数、互质关系、欧拉函数、欧拉定理以及模反元素。接着,会介绍下RSA算法的具体实现流程,并且会结合例子进行理论加实践的描述。

然后,会根据前面讲解的数论的知识,进行RSA算法的安全性验证与推导的验证。

最后,通过这一系列的描述与讲解,相信读者对于RSA算法已经进行了掌握,后面会介绍下在网络传输中的应用。

所以本节主要介绍数论的基础知识,为后续的RSA算法的推导和证明提供理论基础。

2.1 质数

质数在数学领域是一个神奇的数字,很多数学定理都是基于质数的。

质数(Prime number),又称素数,大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。大于1的自然数若不是素数,则称之为合数(也称为合成数)。例如,5是个素数,因为其正约数只有1与5。而6则是个合数,因为除了1与6外,2与3也是其正约数。

算术基本定理确立了素数于数论里的核心地位:任何大于1的整数均可被表示成一串唯一素数之乘积。为了确保该定理的唯一性,1被定义为不是素数,因为在因式分解中可以有任意多个1(如3、1×3、1×1×3等都是3的有效约数分解)。

2.2 互质关系(互质数)

互质数

如果两个整数的公约数只有1,那么叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。

例如:

1. 8,10的最大公因数是2,不是1,因此不是整数互质。
2. 7,11,13的最大公因数是1,因此这是整数互质。
3. 5和5不互质,因为5和5的公因数有1、5。
4. 1和任何数都成倍数关系,但和任何数都互质。

关于互质关系,总结一下,有如下的性质

1. 两个不同的质数一定互质。例如2与7,13和19。
2. 一个数是质数,另一个数不是它的倍数,两者就构成互质关系,比如5和26。
3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
4. 1不是质数也不是合数,它和任何一个自然数(1本身除外)在一起都是互质关系。如1和9908。
5. 相邻的两个自然数是互质数。如 15与 16。
6. 相邻的两个奇数是互质数。如 49与 51。
7. 较大数是质数的两个数是互质数。如97与66。

2.3 欧拉函数

提到欧拉,就不得不多说几句,莱昂哈德•欧拉(Leonhard Euler,1707年4月5日~1783年9月18日)是瑞士巴塞尔附近一个牧师的儿子,他除了学习神学外,还研究数学,并且取得了巨大的成绩。他被一些数学史学者称为历史上最伟大的两位数学家之一(另一位是卡尔•弗里德里克•高斯)。数学中很多名词以欧拉的名字命名,如欧拉常数,欧拉方程,欧拉恒等式,欧拉示性数等等。

欧拉被公认为人类历史上成就最为斐然的数学家之一。在数学及许多分支中都可以见到很多以欧拉命名的常数、公式和定理,他的工作使得数学更接近于现在的形态。他不但为数学界作出贡献,更把数学推至几乎整个物理领域。此外欧拉还涉及建筑学、弹道学、航海学等领域。瑞士教育与研究国务秘书Charles Kleiber曾表示:“没有欧拉的众多科学发现,今天的我们将过着完全不一样的生活。”法国数学家拉普拉斯则认为:读读欧拉,他是所有人的老师。

那么在数论中对于正整数n来说,欧拉函数 φ(n)的计算逻辑就是小于n的正整数中与n互质的整数的数目。

例如,在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。
  1. 如果n是质数,那么φ(n) =n-1。反之,如果n是正整数且满足φ(n) =n-1,那么n是质数。
  2. 如果n是质数p的k次方,那么 ϕ ( p k ) = p k − p k − 1 \phi(p^k) = p^k - p^{k-1} ϕ(pk)=pkpk1
  3. 如果m和n是互质数,那么 ϕ ( m n ) = ϕ ( m ) ∗ ϕ ( n ) \phi(mn) = \phi(m) * \phi(n) ϕ(mn)=ϕ(m)ϕ(n)
  4. 如果 n = p 1 a 1 ∗ p 2 a 2 ∗ . . . ∗ p n a n n=p_1^{a_1} * p_2^{a_2}*...*p_n^{a_n} n=p1a1p2a2...pnan(p是质数),那么 ϕ ( n ) = n ( 1 − 1 p 1 ) ∗ ( 1 − 1 p 2 ) ∗ . . . ∗ ( 1 − 1 p n ) \phi(n) = n(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*...*(1-\frac{1}{p_n}) ϕ(n)=n(1p11)(1p21)...(1pn1)

2.4 欧拉定理

上面我们介绍了质数、互质关系以及欧拉函数,基于这些知识,我们继续介绍欧拉定理,

  • 定义

如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立,可以理解为a的φ(n)次方被n除的余数为1。

a ϕ ( n ) ≡ 1 ( m o d    n ) a^{\phi(n)} \equiv 1(mod \; n) aϕ(n)1(modn)

用通俗的语言描述下,就是a的 ϕ ( n ) \phi(n) ϕ(n)次方除以n的余数是1,也可以理解为a的 ϕ ( n ) \phi(n) ϕ(n)次方加1可以被n整除。

  • 样例

正整数3和8互质,其中8的欧拉函数是4(互质数是1,3,5,7),则3的4次方是81,81减去1正好是80,80除以8正好被整除。

  • 特殊情况:费马小定理

假设正整数a与质数p互质,因为质数p的φ§等于p-1,则欧拉定理可以写成

a p − 1 ≡ 1 ( m o d    n ) a^{p-1} \equiv 1(mod \; n) ap11(modn)

也可以表示成

a p ≡ a ( m o d    n ) a^{p} \equiv a(mod \; n) apa(modn)

欧拉定理(费马小定理)的证明涉及到当模是合数(素数就是费马小定理)的时候如何处理包含指数的特定同余式,相关证明大家可以看下数论的相关书籍,推荐阅读《初等数论机及其应用》(Kenneth H. Rosen著),里面的讲解还是比较清晰的。

2.5 模反元素(模逆运算)

模逆运算

  • 定义

模反元素亦叫模逆运算,定义如下:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。

a ∗ b ≡ 1 ( m o d    n ) a*b\equiv 1(mod \; n) ab1(modn)

  • 样例

比如,3和14互质,那么3的模反元素就是5,因为 (3 × 5)-1 可以被14整除。显然,模反元素不止一个, 5加减14的整数倍都是3的模反元素 {…,-23, -9, 5, 19, 33,…},即如果b是a的模反元素,则 b+kn 都是a的模反元素。

2.6 原根

在数论中,特别是在除法理论中,原根是一个非常重要的概念。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMTdoWGN-1649849762489)(/Users/dubaokun/Desktop/1-work/1-历练成长/文章发布/8 图片/文章/image-20220412173743076.png)]

对于两个互质的正整数a和n。有上面介绍的欧拉定理可知,存在正整数 d ≤ m − 1 d\leq m -1 dm1,比如说欧拉函数 d = ϕ ( n ) d=\phi(n) d=ϕ(n),即小于等于m的正整数中与m互质的正整数的个数,使得 a d ≡ 1 ( m o d    n ) a^d \equiv 1(mod \; n) ad1(modn)

由此,对于对于两个互质的正整数a和n。定义a对模n的指数 δ n ( a ) \delta_n(a) δn(a)为使得 a d ≡ 1 ( m o d    n ) a^d \equiv 1(mod \; n) ad1(modn)成立的最小的正整数d。由前面知道 δ n ( a ) \delta_n(a) δn(a)一定小于等于 ϕ ( n ) \phi(n) ϕ(n),若 δ n ( a ) = ϕ ( n ) \delta_n(a) =\phi(n) δn(a)=ϕ(n),则称a是n的原根。

举例:

设n=7,则 ϕ ( n ) \phi(n) ϕ(n)等于6。

  • 设a=2,那么由于 2 1 ≡ 2 ( m o d    7 ) , 2 2 ≡ 4 ( m o d    7 ) , 2 3 ≡ 1 ( m o d    7 ) , 2 4 ≡ 2 ( m o d    7 ) , 2 5 ≡ 4 ( m o d    7 ) , 2 6 ≡ 1 ( m o d    7 ) 2^1\equiv 2(mod \; 7),2^2\equiv 4(mod \; 7),2^3\equiv 1(mod \; 7),2^4\equiv 2(mod \; 7),2^5\equiv 4(mod \; 7),2^6\equiv 1(mod \; 7) 212(mod7)224(mod7)231(mod7)242(mod7)254(mod7)261(mod7),因此有 O r d 7 ( 2 ) = 3 ≠ ϕ ( 7 ) Ord_7(2) = 3 \neq \phi(7) Ord7(2)=3=ϕ(7),所以2不是模7的一个原根。
  • 设a=3,那么由于 3 1 ≡ 3 ( m o d    7 ) , 3 2 ≡ 2 ( m o d    7 ) , 3 3 ≡ 6 ( m o d    7 ) , 3 4 ≡ 4 ( m o d    7 ) , 3 5 ≡ 5 ( m o d    7 ) , 3 6 ≡ 1 ( m o d    7 ) 3^1\equiv 3(mod \; 7),3^2\equiv 2(mod \; 7),3^3\equiv 6(mod \; 7),3^4\equiv 4(mod \; 7),3^5\equiv 5(mod \; 7),3^6\equiv 1(mod \; 7) 313(mod7)322(mod7)336(mod7)344(mod7)355(mod7)361(mod7),因此有 O r d 7 ( 3 ) = 6 = ϕ ( 7 ) Ord_7(3) = 6 = \phi(7) Ord7(3)=6=ϕ(7),所以2不是模7的一个原根。

3 Diffie–Hellman key exchange

3.1 Diffie–Hellman key exchange的定义

Diffie–Hellman key exchange是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称秘钥讯内容。公钥交换的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼Martin Edward Hellman在1976年首次发表。马丁·赫尔曼曾主张这个密钥交换方法,应被称为迪菲-赫尔曼-墨克密钥交换(英语:Diffie–Hellman–Merkle key exchange)。

虽然迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础。

3.2 协议历史

迪菲-赫尔曼密钥交换是在美国密码学家惠特菲尔德·迪菲和马丁·赫尔曼的合作下发明的,发表于1976年。它是第一个实用的在非保护信道中创建共享密钥方法。它受到了瑞夫·墨克的关于公钥分配工作的影响。约翰·吉尔(John Gill)提出了离散对数问题的应用。该方案首先被英国的马尔科姆·J·威廉森(Malcolm J. Williamson)在稍早的几年前发明,但是GCHQ直到1997年才决定将其公开,这时在学术界已经没有了研究这个算法的热潮了。

这个方法被发明后不久出现了RSA,另一个进行公钥交换的算法。它使用了非对称加密算法。

2002年,马丁·赫尔曼写到:

这个系统…从此被称为“迪菲-赫尔曼密钥交换”。 虽然这个系统首先是在我和迪菲的一篇论文中描述的,但是这却是一个公钥交换系统,是墨克提出的概念,因此如果加上他的名字,这个系统实际上应该称为“Diffie–Hellman–Merkle密钥交换”。我希望这个小小的讲坛可以帮助我们认识到墨克对公钥密码学的同等重要的贡献。

The system…has since become known as Diffie–Hellman key exchange. While that system was first described in a paper by Diffie and me, it is a public key distribution system, a concept developed by Merkle, and hence should be called ‘Diffie–Hellman–Merkle key exchange’ if names are to be associated with it. I hope this small pulpit might help in that endeavor to recognize Merkle’s equal contribution to the invention of public key cryptography.

描述了这个算法的美国专利第4,200,770号,已经于1997年4月29日后过期,专利文件表明了Hellman、Diffie和Merkle是算法的发明者。

3.3 算法协议流程

迪菲-赫尔曼通过公共信道交换一个信息,就可以创建一个可以用于在公共信道上安全通信的。

以下解释它的过程(包括算法的数学部分):

最简单,最早提出的这个协议使用一个质数p整数模n乘法群以及其原根g。下面展示这个算法,绿色表示非秘密信息,红色粗体表示秘密信息:

由上面的流程可以看到,Alice和Bob最终都得到了同样的值,因为在模p的情况下 g a b 和 g b a g^{ab}和g^{ba} gabgba相等。注意 a 、 b 和 g a b = g b a m o d p a、b和g^{ab}=g^{ba} mod p abgab=gbamodp是秘密的。

所以一旦Alice和Bob得到共同秘钥也就是上面的2(当然实际情况不会是2),就可以使用这个公共秘钥进行对称加密。因为这个秘钥只有他们才能拿到。当然为了让这个例子变得更加安全,必须使用非常大的 a 、 b 和 p a、b和p abp,否则可以暴力破解,例如 g a b m o d 23 g^{ab} mod 23 gabmod23,总共只有22个这样的值,就算a和b再大也没有用。如果p是一个至少300位的质数,并且a和b至少有100位长,那么即使是现有的最好的资源和算法也不能从 g , p 和 g a m o d p g,p和g^{a} mod p gpgamodp中计算出a,这个就是著名的离散对数问题,有兴趣的读者可以查阅下这方面的资料。另外需要注意的是g不需要很大,一般在实践中通常是2或者5即可。IETF RFC3526文档中有几个常用的大质数可供使用。

3.4 算法协议的安全验证

下面的图示可以方便你理解每个信息都只有谁知道。伊芙是一个窃听者——她可以看到爱丽丝和鲍伯的通讯内容,但是无法改变它们)

  • Let s = 共享密钥。 s = 2

  • Let a = 爱丽丝的私钥。如 a = 6

  • Let A = 爱丽丝的公钥。如 A = ga mod p = 8

  • Let b = 鲍伯的私钥。如 b = 15

  • Let B = 鲍伯的公钥。如 B = gb mod p = 19

  • Let g = 公共原根。如 g=5

  • Let p = 公共质数. 如 p = 23

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BuCDYOfA-1649849762490)(/Users/dubaokun/Desktop/1-work/1-历练成长/文章发布/8 图片/文章/image-20220412170926559.png)]

注意:对爱丽丝来说解开鲍伯的私钥或鲍伯要解开爱丽丝的私钥应该都很困难。如果对爱丽丝来说解开鲍伯的私钥不难的话(反之亦然),伊芙可以轻易地替换掉她自己的私钥/公钥对,把鲍伯的公钥插到她自己的私钥,产生出一个假的共享密钥,并解开鲍伯的私钥(然后用这个解开共享私钥。伊芙可以试着选择一个能让她轻松解开鲍伯的私钥的公钥/私钥对)。

四 参考资料

  • https://zh.wikipedia.org/wiki/%E5%8E%9F%E6%A0%B9
  • https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

五 番外篇

个人介绍:杜宝坤,隐私计算行业从业者,从0到1带领团队构建了京东的联邦学习解决方案9N-FL,同时主导了联邦学习框架与联邦开门红业务。
框架层面:实现了电商营销领域支持超大规模的工业化联邦学习解决方案,支持超大规模样本PSI隐私对齐、安全的树模型与神经网络模型等众多模型支持。
业务层面:实现了业务侧的开门红业务落地,开创了新的业务增长点,产生了显著的业务经济效益。
个人比较喜欢学习新东西,乐于钻研技术。基于从全链路思考与决策技术规划的考量,研究的领域比较多,从工程架构、大数据到机器学习算法与算法框架均有涉及。欢迎喜欢技术的同学和我交流,邮箱:baokun06@163.com

六 公众号导读

自己撰写博客已经很长一段时间了,由于个人涉猎的技术领域比较多,所以对高并发与高性能、分布式、传统机器学习算法与框架、深度学习算法与框架、密码安全、隐私计算、联邦学习、大数据等都有涉及。主导过多个大项目包括零售的联邦学习,社区做过多次分享,另外自己坚持写原创博客,多篇文章有过万的阅读。公众号秃顶的码农大家可以按照话题进行连续阅读,里面的章节我都做过按照学习路线的排序,话题就是公众号里面下面的标红的这个,大家点击去就可以看本话题下的多篇文章了,比如下图(话题分为:一、隐私计算 二、联邦学习 三、机器学习框架 四、机器学习算法 五、高性能计算 六、广告算法 七、程序人生),知乎号同理关注专利即可。

一切有为法,如梦幻泡影,如露亦如电,应作如是观。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值