Cryptography I 学习笔记 --- 绪论】的更多相关文章

课程地址 1. 密码学可以用于保证消息传递的机密性(第三方不可能得到明文)与完整性(密文如果被第三方篡改,有手段可以检测到) 2. 数字签名(用私钥加密待签名文件的hash值) 3. 匿名通信(mixnet,经过多重代理的双向通信,无法追溯信息来源,中间的代理也不知道通话双方/通话内容,类似于tor) 4. 匿名数字现金(bitcoin?) 5. 无信任中心的安全多方计算(选举,竞标) 6. 私有外包计算 7. 零知识(Alice向Bob证明,自己确实知道问题的解,但是不必把问题的解告诉Bob)…
在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是否匹配.如果检测…
1. ECBC-MAC,需要一对密钥k与k1,然后将明文分组,用cbc模式对明文分块加密,将最后的密文块再用k1进行加密,即可得到结果 2. NMAC,需要一对密钥k与k1,然后将明文分组,用k加密第一组明文,得到k',然后用k'加密第二组明文,得到k'',依次类推,最后得到k(n) ,然后用k1对k(n) 进行加密,即可得到结果 如果没有最后一步利用密钥k1的加密,我们可以在明文后附加一组数据,然后用原先的MAC结果再对附加文加密,从而得到新结果.   扩展攻击 3. 在给MAC做填充时,不能…