m^(kφ(n)+1 )mod n = m, 其中, φ(n)=(p-1)(q-1)
4)已知两个互异的大素数p、q,计算n=pq是容易的;反之,若已知n是两个素数p、q的乘积,分解出p、q却是很困难的
算法描述:
1)选择两个互异的大素数p和q,计算n=pq,计算φ(n)=(p-1)(q-1)
2)选择整数 13)计算得到e的模φ(n)乘法逆元d,即
e*d mod φ(n) =1,其中, 14)公钥是P=(e, n),私钥是S=(d, n, p, q)
以上(1)到(4)由私钥拥有者完成
5)对于明文m, 0≤m加密运算:c=m^e mod n (使用公钥)
解密运算:m=c^d mod n (使用私钥)
算法有效性:
d是e的模φ(n)乘法逆元,e*d mod φ(n)=1,故存在一个正整数k使得e*d=kφ(n)+1
c^d mod n = (m^e mod n)d mod n = m^(ed) mod n
= m^(kφ(n)+1 )mod n = m
6)将使用e、d的顺序换一下,结果同样正确(用于数字签名)
加密运算:c=m^d mod n (使用私钥d)
解密运算:m=c^e mod n (使用公钥e)
ElGamal加密算法
ElGamal加密算法,基于循环群(Cyclic group),可用于任何循环群,包括椭圆曲线上的点构成的循环群(ECC密码算法)
群:一个定义了乘法(或加法)包含”1”(或”0”)元素的集合,集合中的任何一个元素都存在乘法(或加法)逆
循环群,集合中的所有元素可由一个元素g按乘法幂g^i生成(或加法倍乘i*g生成)椭圆曲线上的点构成了循环群
例如:若Z*p={1,2,…,p-1},p为素数,任意a、b ∈ Z*p,a*b定义为ab mod p,则Z*p就是一个乘法循环群,它的一个原根g可生成Z*p的所有元素,即Z*p={g, g2, …, gp-1} (mod p?)
设g是Z*p的一个大原根(Primitive root),即gi mod p,i=1,…,p-1,生成Z*p的所有元素
密钥生成
Alice 随机生成一个整数x,1Alice计算h=gx mod p
Alice保存x作为其私钥,将 (h, g, p)作为公钥发布
数据加密
Bob随机生成一个整数y,1Bob计算共享秘密 s=hy mod p = gxy mod p (D-H密钥)
Bob计算(加密) c2 = m*s mod p
Bob将(c1, c2)=(gy mod p, m*s mod p)发送给Alice
数据解密
Alice计算共享秘密 (c1)x mod p =gxy mod p=s (D-H密钥)
Alice计算得到s模p乘法逆s-1
Alice计算(解密) c2*s-1 mod p = (m*s*s-1 mod p)
= (m mod p)*(s*s-1 mod p) mod p = m
算法实现复杂
相对于对称密钥密码算法,速度较慢
有的算法密钥长度长(如RSA, EIGamal算法)
密钥分发容易
通常采用非对称密钥密码算法和对称密钥密码算法相结合的方案:随机对称密钥加密数据,非对称密钥加密随机对称密钥
有些算法既可用于数据加密,又可用于抗抵赖数字签名
多数算法适合分组加密
RSA数字签名
发送方
- 计算消息散列 h=HASH(m)
- 用自己的私钥对散列值加密h,得签名值s=E私(h)
- 将消息m和签名值s一起发送到接收方
接收方
- 用发送方的公钥解密签名值s,获得h=D公(s)
- 用同样的散列算法计算接收的消息m的散列值, hˊ=HASH(m)
- 比较h和hˊ是否一致,如一致,则说明:(1)消息m确实发送方所发;(2)消息在传输过程中未出错、未篡改
对密码系统的常用攻击方法
唯密攻击(Ciphertext only attack)
- 攻击者只能获得密文,从密文获得明文或密钥,比如蛮力攻击(brutal force attack)
已知明文攻击(Known plaintext attack)
- 攻击者知道一些密文及对应的明文,从而破解加密方法或密钥
选择明文攻击(Chosen plaintext attack)
- 攻击者可以选择明文使用密码设施进行加密,获得对应密文,从而分析破解加密方法或密钥
PKI安全体系
PKI(Public Key Infrastructure),公钥基础设施,一个基于公开密钥密码算法、技术的安全技术体系和一个安全信任体系
PKI的核心是CA(Certification Authority,认证中心),由CA签发和发布证明最终实体(End-Entity)拥有公钥的数字证书
数字证书(Digital Certificate)是一种特别的电子文件,其目的是将公钥与用户或实体绑定,并限定公钥的用途,其格式是X509
数字证书由CA证书认证机构通过CA证书认证系统签发
单证书体系,即一个最终用户证书及私钥既用于数据加密和解密,又用于数字签名和签名验证
双证书体系,即一个最终用户有两个证书,一个用于数据加密,另一个用于数字签名
应用:安全电子邮件的应用
身份鉴别
身份鉴别包括身份标识(Identification)和身份鉴别(Authentication)两部分
身份标识,即确定你是谁并颁发一个身份凭证,如身份证、用户名/口令、数字证书
身份鉴别,即根据你提交的身份凭证并通过特定信息、物件、特征,验证确定你就是你声称的人,而不是假冒者
用户名/口令
静态口令
动态口令
生物特征
服务器交互中的身份鉴别技术
安全的服务器登录技术
常用登录鉴别技术
- 利用HTML的Form元素(表单)输入用户名、口令,并通过HTTP传输协议提交
- 实施主体可以是Web服务器、动态页面运行环境 (Web容器,或应用服务器(Application Server)、Web应用程序
- 针对HTTP传输协议专门制定的身份鉴别协议
- 包括:Basic、Digest、NTLM、Negotiate几种方案
- 实施主体可以是Web服务器、动态页面运行环境(Web容器或应用服务器)
Web系统的会话
会话(Session)是两个端点之间的应用层的逻辑连接
应用系统通过会话机制来识别客户端的用户(逻辑连接),以及维护用户的信息(如用户是否已完成身份鉴别、用户名是什么、有哪些权限等),Web系统的传输协议HTTP本身是无连接的传输协议,既可以使用TCP也可以使用UDP传输, 同一个会话可以采用不同的TCP连接。HTTP不维护Web客户端与Web服务器之间的会话连接,Web系统需要采用其他机制维护客户端与服务端之间的会话,包括会话连接和用户信息
HTTP Cookie
Cookie是Web系统返回、并在客户端浏览器设置的信息,浏览器每次访问对应的Web系统时会自动提交此信息;Cookie内容由Web系统决定,Cookie分为临时(或会话)Cookie和永久Cookie,Cookie中可放置会话连接维护信息,如会话ID
URL编码
Web系统返回到浏览器的Web页面中的URL(如超链接)中保存有会话连接信息
用户浏览器提交到Web系统的HTTP请求的URL中包含会话连接信息
隐藏表单数据(Hidden Form Data)
Web系统返回到浏览器的Web页面中包含隐藏表单(Form),隐藏表单中包含有会话连接信息
用户通过浏览器提交到Web系统的请求中将包含隐藏表单中的信息
会话对象(Session Object)
Web系统服务端的数据对象
会话对象由会话标识符(Session ID)标识
可以由Web服务器、动态页面运行环境 (Web容器)、应用程序维护
SSO技术
基于Cookie的单点登录
利用Cookie可设置作用路径(Path)和域(Domain)的特性,在多个系统间共享Cookie
Path=/mail/
Domain=.sina.com.cn
若多个系统具有共同的路径,则可将Cookie的作用路径设置为共同路径,从而多个系统可共享Cookie
www.example.com/abc/admin/
www.example.com/abc/user/
设置Path=/abc/
若多个系统是同一个域的子域,则可将Cookie的作用域设置为共同的域,从而多个系统可共享Cookie
mail.sina.com.cn
blog.sina.com.cn
Domain=.sina.com.cn
当一个用户在一个系统完成登录鉴别后,系统将标志用户已完成登录的安全令牌设置为共享Cookie,当用户访问其他系统时,其他系统通过共享Cookie知道用户已完成登录鉴别及用户的身份信息
基于SSO 协议的单点登录
Kerberos协议
HTTP Negotiate
SAML(Security Assertion Markup Language)
WS-Federation
WS-Federation Passive Requestor Profile