1. 如果加密算法是确定性的(相同的明文产生相同的密文),那么它对于选择明文攻击是不安全的 2. 随机化加密,每次对相同的密文加密,会产生不同的结果 AES加密模式 ecb:明文分块计算,块与块之间没有影响,可以并发加密.但是可能暴露明文的模式 cbc:每个明文分块都与上一个密文分块异或,然后再行加密.无法并发加密,错误传递,需要一个随机的初始化向量 ctr:约定一个从随机值k开始的计数器,然后用密钥对计数器加密,接着同明文XOR得到密文.类似于流密码,无需填充 唯密文攻击:只知道密文 已知明文…
1. 伪随机置换(PRF,Rseudo Random Permutaion)3DES/AES,K*X -> X(a. 可以高效计算,b. PRF函数是一个一一映射的函数,c. 存在有效的逆向算法) 2. Feistel网络 3. 对于AES,Intel的CPU中内置了相关的指令集,可以在一个时钟周期内完成一个round的操作 4. AES的S盒可以临时计算得到,所以如果运行设备的空间极为有限,可以用时间来换空间…
在b站上大概的看完了Dan Boneh的密码学,对现代密码学总算有了一个粗浅的认识. 总算能在纸上手写RSA公式并且证明之了,蛤蛤. 总体的感触就是,现代密码学是一个非常博大精深的体系,我等程序员最重要的是学习正确的使用别人已经编写好的密码库,千万不要妄图自己实现一套密码体系.否则各种奇形怪状的攻击分分钟教你做人. 最后,有点后悔高中的时候没有搞数学竞赛.听课的时候,数论相关的东西,花了很大力气到处查资料才能搞懂.…
1. Diffie-Hellman协议: 假定g是集合G的生成元,G有n个元素. Alice随机选取1-n中的一个数a,并公布ga为公钥 Bob随机选取1-n中的一个数b,并公布gb为公钥 那么gab就是Alice与Bob之间的私钥 从公钥中提取私钥,是一个离散对数问题,难以解决. 裸的Diffie-Hellman协议有中间人攻击的风险 2. Elgamal系统 n阶有限循环群G,哈希函数H,对称加密算法Es与Ds Alice随机选取G的一个生成元g,从1到n-1间随机选取一个数a Alice将…
RSA算法的工作流程 1. 生成公钥私钥 生成两个素数p和q,计算n=p*q,计算φ(n)=n-p-q+1,然后生成e与d,使 e * d = 1 mod φ(n). 然后以(n, e)作为公钥,(n,d)作为私钥,其他的p,q,φ(n)可以舍弃. 2. 加密 明文为c 密文r = ce mod n 解密 密文为r 明文c = rd mod n 3. 证明 将加密的结果代入解密公式中,可以得到 rd mod n =  (ce mod n)d mod n = ced mod n = ck*φ(n)…
0. Zn代表{0,1....n-1}的集合 1. 模运算符合交换律结合律 2. gcd(greatest common divisor),可以由扩展欧几里得算法快速得到. 3. 模逆(modular inversion),在Zn上,x的模逆为y,那么x*y=1 mod n 4. Zn上如果x有模逆,那么x与n互质,也就是gcd(x,n)=1 5. Zn*代表Zn中,所有可逆元素的集合.那么如果n为质数,那么Zn* = Zn - {0} 6. 费马小定理:如果p是质数,那么任意x ∈ Zp*,都…
1. 使用可信第三方(Trusted third parties)进行密钥交换. a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2. b. Alice向TTP发起一个与Bob交换密钥的请求.TTP生成一个随机密钥Kab,然后将Kab用K1加密,得到E1,将Kab用K2加密,得到E2. c. TTP将E1与E2一起发送给Alice.Alice用K1解密E1,得到密钥Kab. d. Alice再将E2发送给Bob,Bob用K2解密E2,也得到密钥Kab. e. 现在Alice…
1. KDF(密钥推导函数,key derivation function),根据用户输入的一个初始密钥来生成一系列的后续密钥.可以使用PRF来生成 2. 可以用salt与slow hash function来加强安全 3. 在数据库里存储密文,然后用加密后的密文来做查询,可以让数据保存者无法知道存储的信息是什么(类似于user表里存储了hash后的密码),但是由于一般使用的确定性的加密函数,所以攻击者至少还是可以知道,有哪些密文是相同的-->哪些明文是相同的,如果明文空间小,还是存在安全隐患.…
1. 认证加密,Alice与Bob共享一个密钥k,Alice可以发送密文E给Bob,Bob可以确定接收到的E一定是拥有密钥k的Alice产生的.而不是攻击者随便产生的. 2. 认证加密必须能抵挡住选择密文攻击 3. 认证加密无法抵挡重放攻击 4. tls,两边维护一个相同的自增计数器,可以抵挡重放攻击 5. 先对明文加密,然后在对密文做MAC是安全的.其他次序都是有隐患的.…
1. 生日攻击,如果hash函数可以产生n bit的结果,那么生日攻击的时间复杂度在O(nn/2)这个量级.以比特币使用的SHA256为例,其hash结果为256bit,那么如果想完成一次生日攻击,那么需要计算并保存2^128次SHA256计算的结果.而现在比特币的全网算力不到4E Hash/s,也就是每秒执行2^62次SHA256计算,那么需要超过2^66秒才能完成一次生日攻击. 2. 一种针对HMAC的有趣的攻击手段:有一个服务器会接受明文P与HMAC结果H,然后返回P与H是否匹配.如果检测…