1. 认证加密,Alice与Bob共享一个密钥k,Alice可以发送密文E给Bob,Bob可以确定接收到的E一定是拥有密钥k的Alice产生的.而不是攻击者随便产生的. 2. 认证加密必须能抵挡住选择密文攻击 3. 认证加密无法抵挡重放攻击 4. tls,两边维护一个相同的自增计数器,可以抵挡重放攻击 5. 先对明文加密,然后在对密文做MAC是安全的.其他次序都是有隐患的.…
随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍.但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问:另外也没有加密功能,任何人获取到文件后,就可以查到明文数据.这使得大家对于sqlite又爱又不敢用,毕竟用户的隐私是非常重要的.Sqlite分为开源版本和收费版,收费的版本是支持加密的,只不过需要付2000刀的技术支持费.当然,由于sqlite本身是开源的,业内有很多产品对sqlite增加了加密功能,比如…
在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)…
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. ECBC-MAC,需要一对密钥k与k1,然后将明文分组,用cbc模式对明文分块加密,将最后的密文块再用k1进行加密,即可得到结果 2. NMAC,需要一对密钥k与k1,然后将明文分组,用k加密第一组明文,得到k',然后用k'加密第二组明文,得到k'',依次类推,最后得到k(n) ,然后用k1对k(n) 进行加密,即可得到结果 如果没有最后一步利用密钥k1的加密,我们可以在明文后附加一组数据,然后用原先的MAC结果再对附加文加密,从而得到新结果.   扩展攻击 3. 在给MAC做填充时,不能…
1. 如果加密算法是确定性的(相同的明文产生相同的密文),那么它对于选择明文攻击是不安全的 2. 随机化加密,每次对相同的密文加密,会产生不同的结果 AES加密模式 ecb:明文分块计算,块与块之间没有影响,可以并发加密.但是可能暴露明文的模式 cbc:每个明文分块都与上一个密文分块异或,然后再行加密.无法并发加密,错误传递,需要一个随机的初始化向量 ctr:约定一个从随机值k开始的计数器,然后用密钥对计数器加密,接着同明文XOR得到密文.类似于流密码,无需填充 唯密文攻击:只知道密文 已知明文…
1. 对于一次性密码本(one time pad),没有唯密文攻击(cypher text only attack),也就是说如果攻击者只能拿到密文,他什么也做不了 2. 完美密码:密钥长度大于密文长度,没有实用价值 3. prg必须是无法预测的,也就是如果知道了一段随机数,判断下一个随机数正确的概率的概率只比乱猜高一个很小的数ε(ε>2^-30为可预测,ε<2^-80为不可预测).因此很多prg不能用于流密码,比方说常用的线性同余,glibc里的random 4. 流密码不可使用超过一次(二…