Introduction to modern cryptography阅读笔记(三)
拿到纸质书之后又从头读了一遍
从chapter one开始
ad hoc 点对点
三个原则
1、Formal Definitions
任何密码方案需要一个formal definitions也就是一个正式的定义。
A scheme satisfying a weaker definition may be more efficient than another scheme satisfying a stronger definition.
一个安全方案的定义包含两个组成部分
1、安全保障
2、威胁模型
blatantly insecure公然的不安全
安全保障所要提供的
1、恢复**是不可能的
2、从密文中恢复完整的明文是不可能的
3、从密文中恢复任意一个明文特征也是不可能的
例如加密的工资数据库,虽然无法恢复出具体数额
但也不能够恢复出如下信息:
A的工资比B高,这样也是不允许的
4、不能泄露额外的信息
威胁模型
威胁模型所代表的就是攻击者具有的攻击能力
plausible option 合理选择
- 唯密文攻击
- 已知明文攻击
- 选择明文攻击
- 选择密文攻击
唯密文攻击
指的是在仅知已加密文字(即密文)的情况下进行穷举攻击。只知道密文。
已知明文攻击
得到了一些给定的 明文和对应的密文,在这里可以是的任意非空子集。 已知明密文对。
选择明文攻击
攻击者除了知道加密算法外,还可以选定明文消息,并可以知道对应的加密得到的密文,即知道选择的明文和加密的密文。
选择密文攻击
攻击者掌握对解密机的访问权限,可构造任意密文所对应的明文。
off-the-cuff 现成的
第一章课后习题
1、思路统计密文中字母出现频率和图1.3对比一下找到明文和密文的对应关系
代码就是简单统计字频代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
char arr[]="JGRMQOYGHMVBJWRWQFPWHGFFDQGFPFZRKBEEBJIZQQOCIBZKLFAFGQVFZFWWEOGWOPFGFHWOLPHLRLOLFDMFGQWBLWBWQOLKFWBYLBLYLFSFLJGRMQBOLWJVFPFWQVHQWFFPQOQVFPQOCFPOGFWFJIGFQVHLHLROQVFGWJVFPFOLFHGQVQVFILEQGIQVVOSFAFGBWQVHQWIJVWJVFPFWHGFIWIHZZRQGBABHZQOCGFHX";
int count[26]={0};
int len=sizeof(arr)/sizeof(char);
for(int i=0;i<len;i++)
{
int index=arr[i]-'A';
count[index]++;
}
for(int i=0;i<26;i++)
{
double x;
x=count[i]*1.0/len;
x*=100;
char c='A'+i;
printf("the %c frequency is %.1f\n ",c,x);
}
return 0;
}
其中F字符出现次数最高,可以替换e,其次是Q可以替换t,(然后一一匹配即可),暂时没有想到便捷方法,因为原来字频也要排个序才好。
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
放个**链接可以看看
单表代换破译
2、给出单表替换密码的formal definition
Gen
Enc
Dec
3、给出Vigenere密码的formal definition
4、实现本章提出的移位密码和vigenere密码的攻击
5、恢复出**需要多少选择明文
6、假定一个密码攻击者知道用户的密码是abcd或bedg,用户用移位密码对pwd进行加密,并且攻击者看到了加密结果。那么攻击者如何确定用户的密码是两者中的哪个?
7、用2、3、4重复之前的Vigenere密码实验
8、提供移位、替换、Vigenere密码的标准定义并讨论如何对修改后的加密方案进行攻击