Introduction and Classical Cryptography

1. Introduction

1.1 Cryptography and Modern Cryptography

In short, cryptography has gone from a heuristic set of techniques for ensuring secret communication for a few niche applications to a science that helps secure systems more generally for ordinary people around the world.
密码学应用变得越来普及,生活中无处不在。

1.2 The Setting of Private-Key Encryption

经典的密码学是关于设计和使用代码(或密码),使双方能够发送消息,同时保持这些消息的隐藏,窃听者可以监视它们之间的所有通信。在现代术语中,代码被称为加密方案,这就是我们将在这里使用的术语。所有经典加密方案的安全性都依赖于一个密钥(key)——事先由通信方预先共享,窃听者未知。在这个场景中,通信方预先共享一些秘密信息,被称为私钥(或共享/密钥)设置,私钥加密是此设置中使用的密码原语的一个例子。

如下图所示,在私钥加密的上下文中,双方共享一个密钥,并在他们想要秘密通信时使用该密钥。一方可以通过使用共享密钥加密消息,向另一方发送消息或明文,从而获得传输给接收方的密文。接收方使用相同的密钥来解密。窃听者是可以监听所有通信的。也就是说你的密文对窃听者来说是透明的,
私钥加密
Private-key,私钥加密,为对称加密,区别于公钥加密,公钥加密为非对称加密,对称加密的双方享有一套相同的密钥。

私钥密码的两个经典应用

  1. 空间上 ,两个人在不同的空间进行通信,这个很容易理解,跟现在我们的通信类似,
  2. 时间上,私钥密码学的第二个广泛应用涉及到同一方随着时间的推移与自己进行通信。例如,磁盘加密,即用户加密一些明文,并将生成的密文存储在他的硬盘上;相同的用户将在稍后的时间点返回,解密密文并恢复原始数据。

PS:在私钥密码中,共享密钥是不能通过公共信道进行传输的,只能通过专用信道进行传输,可能会有疑问,那为什么不在专用信道一起传输明文不就行了,还用这么麻烦吗?这理论上可行,只是耗费巨大而已,专用信道的成本比公共信道的成本必然要高。所以这个方案在实际上并不可行,在上述提到空间上通信时,书中暂不讨论密钥是如何来的,可以认为两个人先线下见面拿到密钥,之后再通信。

The syntax of encryption
私钥加密方案是通过指定消息空间M和三种算法来定义的:生成密钥的过程(Gen)、加密的过程(Enc)和解密的过程(Dec)。消息空间M定义了一组“合法”消息,即方案支持的消息。该方案的算法具有以下功能:

  1. 密钥生成算法Gen是一种概率算法,它输出根据某种分布选择的密钥k。
  2. 加密算法Enc以一个密钥k和一个消息m作为输入,并输出一个密文c。我们用Enck(m)表示用密钥k对明文m的加密。
  3. 解密算法Dec以一个密钥k和一个密文c作为输入,并输出一个明文m。我们用Deck(c)表示密钥k对密文c的解密

加密方案必须满足以下正确性要求:对于Gen输出的每个密钥k和每条消息m∈M,它认为
Deck(Enck(m)) = m.

密钥生成算法输出的所有可能的密钥集称为密钥空间,用K表示。几乎总是,Gen只是均匀地从密钥空间中选择一个密钥;

Keys and Kerckhoffs’ principle
The cipher method must not be required to be secret, and it must
be able to fall into the hands of the enemy without inconvenience.
一个加密方案应该被设计为安全的,即使窃听者知道该方案的所有细节,只要攻击者不知道被使用的密钥。换句话说,安全不应该依赖于加密方案;相反,Kerckhoffs原则要求安全完全依赖于密钥的保密。有以下三个主要论点支持Kerckhoffs原则。

  1. 首先,保持一个短密钥的保密比保密一个(更复杂的)加密方案要容易得多。当加密被广泛使用时,尤其如此。例如,考虑将加密用于某个组织中所有员工对之间的通信的情况。除非每一方都使用自己的独特方案,否则有些一方会知道其他一方正在使用该方案。此外,有关该计划的信息可能会被其中一名员工泄露(比如,在被解雇后),或者被攻击者使用逆向工程获得。简而言之,假设加密方案将继续保密是完全不现实的。如果仅限于几人使用,加密方案保密是可以的,但是大规模使用,加密方案是很难做到保密的。
  2. 其次,如果涉嫌泄露,更改密钥要比更换加密方案容易的多,(考虑是更新文件还是安装新程序。)此外,生成一个新的随机密钥是相对琐碎的,而设计一个新的加密方案将是一项巨大的任务。
  3. 最后,有一个显著的好处是在广泛部署加密方案之前,鼓励公众审查该方案以检查可能存在的弱点。更进一步,我们希望将加密方案标准化,以确保不同用户之间的兼容性,而公众将使用经过公众审查的强大方案。总的来说,也许与直觉相反的是,广泛、公开地传播加密方案的全部细节是有利的——这与保守加密方案的秘密恰恰相反。

1.3 Historical Ciphers and Their Cryptanalysis

In this section, plaintext characters are written in lower case and cipher text characters are written in UPPER CASE for clarity.
本文中,明文字符用小写字母表示,密文字符用大写字母表示。

Caesar’s cipher

凯撒密码,通过将字母表中的字母向前移动3个位置来加密:a被替换为D,b被替换为E,以此类推。在字母表的最后,字母环绕,所以z被C替换,y用B替换,x用a替换。
这个密码的一个直接问题是,加密方法是固定的;没有密钥。因此,任何了解凯撒如何加密他的信息的人都能够毫不费力地解密。有趣的是,这种密码的一种变体ROT-13(其转换位置是13,而不是3)现在仍然在各种在线论坛上使用。据了解,这并不提供任何密码安全;它仅仅是用来确保文本(例如,一个电影剧透)是不可理解的,除非一个信息的读者有意识地决定解密它。

The shift cipher and the sufficient key-space principle

移位密码可以看作是凯撒密码的键控变体。具体来说,在移位密码中,密钥k是一个介于0到25之间的数字。为了加密,字母会像凯撒的密码一样移动,但现在移动了k个位置。消息空间由任意长度的英语字母字符串组成,去掉标点、空格和数字,不区分大写和小写。算法Gen输出一个统一的密钥k∈{0,…,25};算法Enc取一个密钥k和一个明文,并将明文的每个字母向前移动k位置(在字母表的结尾);算法Dec取一个键k和一个密文,并将密文的每个字母向后移动k位置。

原文中更数学的描述,将字母也映射成了数字(从0开始):
数学描述在这里插入图片描述
如何在不知道k的情况下恢复消息(破解解密),这很简单,原因是只有26个可能的k。因此,人们可以尝试使用每个可能的密钥来解密密文,从而获得一个包含26个候选明文的列表。正确的明文肯定会在这个列表上;此外,如果密文“足够长”,那么正确的明文很可能是列表上唯一“有意义”的候选文本。通过扫描候选文本列表,可以很容易地恢复原始的明文。(这并不一定是正确的,但大多数时候都是如此。即使不是这样,这种攻击也会将潜在的明文集缩小到最多26种可能性。)这种方法一般称之为暴力破解,暴力出奇迹,穷尽所有可能的情况。
显然,为了使加密方案安全,它应该不容易受到这样的穷尽搜索攻击。这也被称为 sufficient key-space principle(充分键空间原理):
Any secure encryption scheme must have a key space that is sufficiently large to make an exhaustive-search attack infeasible

任何安全的加密方案都必须有一个足够大的密钥空间,才能使穷尽搜索攻击不可行。如果穷尽搜索可行的话,那将没有任何安全性可言。这里多大的密钥空间才能算做足够大呢,这与时代是息息相关的,跟计算能力也是有很大关联。如今,攻击者可以使用超级计算机、数千台云服务器或图形处理单元(gpu)来加速暴力攻击。为了防止这类攻击,密钥空间必须非常大——比如说,至少有2^80个大小,在许多设置下甚至更大.
sufficient key-space principle(充分密钥空间原理)给出了安全性的必要条件,但不是充分条件。

The mono-alphabetic substitution cipher

在移位密码中,键定义了从(明文)字母表中的每个字母到(密文)字母表中的某个字母的映射,其中映射是由键决定的固定移位。在单字母替换密码中,密钥还定义了字母表上的映射,允许映射是任意的,准确的说是双射。因为它是一对一的(因此解密是可能的)。因此,键空间由字母表中的所有双射或排列组成。

和移位密码不同的是,单字母替换密码的密钥空间不是26,而是26!。26!=26·25·24···2·1,约为2^88,而暴力攻击是不可行的。然而,正如上面所说,充分密钥空间只是必要条件,而非充分条件。这意味着密码并不是安全的!即使这个方案有很大的密钥空间,也很容易破坏这个方案。

破解:
假设被加密的是英文文本(即,文本是在语法上正确的英语书写,而不仅仅是使用英语字母表中的字符书写的文本)。然后,利用英语语言的统计特性,可以攻击单字母替代密码。(当然,同样的想法也适用于任何一种语言)语言具有自己独有特点,而非是字符或者符号随意组合的结果,这也就导致了其具有一定的统计特性。
这次攻击所依据的事实是:

  1. 对于任何键,每个字母的映射都是固定的,因此如果e映射到D,那么e在明文中的每一次出现都会导致D在密文中的出现。
  2. 英语文本中单个字母的频率分布是已知的。(见下图)当然,非常短的文本可能会偏离这种分布,但即使是只有几个句子组成的文本,也往往会有非常接近它的分布。
    字母分布频率
    根据上述两个事实,虽然字母发生了替换,但是字母的频率分布并不是均匀分布,这样就很容易进行攻击了,攻击的工作原理是将密文中字符的频率分布制成表格,即记录A出现的时间为12%,B出现的时间为3%,以此类推。然后将这些频率与普通英语文本的已知字母频率进行比较。然后,我们就可以根据观察到的频率来猜测由该键定义的部分映射。同时英文文本或者其他语言中某些字母是经常组合在一起的,所以导致一旦某一个字母的替换规律被发现,整体上也很快就会被破解。这说明了密钥空间即使足够大,也并不一定安全。
    计算每个字母出现的频率
int p[26];//record the frequency of the ith letter
void frequency(string s)
{
    for(int i = 0; i < s.length(); i++)
    {
        p[s[i] - 'a']++;
    }
}
int main(){
    string s;
    cin>>s;
    frequency(s);
}

An improved attack on the shift cipher
我们可以使用字母-频率表来对移位密码进行改进的攻击。我们之前对移位密码的攻击需要使用每个可能的密钥解密密文,然后检查哪个密钥会导致“有意义”的明文。这种方法的一个缺点是,要实现自动化有点困难,因为计算机很难检查一个给定的明文是否“有意义”。(我们并不说这是不可能的,因为攻击可以使用有效的英语单词字典自动进行。)更重要的是,可能会有一些情况——明文遵循与英语文本相同的分布,即明文本身不是有效的英语,在这种情况下,检查“有意义”的明文将不起作用。

有一个不需要检查明文是否有意义的方法,将字母转换为数字,令pi表示第i个字母在正常英文文本中出现的频率。

∑ i = 0 25 p i 2 ≈ 0.065 \sum_{i=0}^{25}p_i^2\approx 0.065 i=025pi20.065
现在,假设我们得到一些密文,让qi表示字母表中第i个字母的频率;也就是说,qi仅仅是字母表中第i个字母在密文中出现的次数除以密文的长度。如果键是k,那么对于所有的i来说,pi应该大致等于qi+k,因为第i个字母映射到第(i+k)个字母。(我们使用i+k而不是更麻烦的[i+kmod26]。)
I j = ∑ i = 0 25 p i q i + j I_j= \sum_{i=0}^{25}p_iq_{i+j} Ij=i=025piqi+j
对于每个j∈{0,…,25},这导致了一个很容易自动化的密钥恢复攻击:计算所有j的Ij,然后输出最接近0.065的值j。即为k值

const double Fe=0.065;
double p[26];//record the frequency of the ith letter in the text
int q[26];//record the number of the ith letter
double qe[26]; //record the frequency of the ith letter in  ciphertext
bool check(double tmp)
{
    if(abs(tmp-Fe)<1e-3)
        return true;
    return false;
}
void frequency(string s)
{
    for(int i = 0; i < s.length(); i++)
    {
        q[s[i] - 'a']++;
    }
    for(int i = 0; i < 26; i++)
    {
        qe[i] = (double)q[i] / s.length();
    }
}
int main(){
    string s;
    cin>>s;
    frequency(s);
    for(int i=0;i<26;i++)
    {
        double tmp = qe[i]* p[i];
        if(check(tmp))
        {
            cout<<(char)(i+'a');
            break;
        }
    }
}

The Vigenere (poly-alphabetic shift) cipher

可以对单字母替换密码进行统计攻击,因为密钥定义了一个固定的映射,并逐字母地应用到明文中。这种攻击可以通过使用多字母替换密码来阻止,其中密钥定义了一个应用于明文字符块的映射。例如,在这里,一个键可以将2个字符块ab映射到DZ,同时将ac映射到TY;请注意,明文字符a不会映射到一个固定的密文字符。多字母替换密码“平滑”了密文中字符的频率分布,使统计分析的进行更加困难。

Vigenere密码是一种多字母移位密码,是上述的一种特殊情况,可以看作是将移位密码的不同实例应用到明文的不同部分。密钥现在被视为一串字母;加密是通过移动每个明文字符的下一个字符所指示的数量(如果键的长度为1,则这将退化为移位密码。)具体例子如下:
例子
(密钥不一定是英语单词)注意,在上面的例子中,l一次映射到Q,一次映射到p。此外,密文字符E有时从e获得,有时从a获得。因此,密文的字符频率被按需要“平滑”。
如果密钥足够长,破解这个密码似乎会令人生畏。事实上,许多人一直认为它是“牢不可破的”,尽管它是在16世纪发明的,但直到数百年后才对该计划进行了有系统的攻击。

Attacking the Vigenere cipher
攻击Vigenere密码的第一个观察结果是,如果密钥的长度已知,那么攻击密码就相对容易了。具体来说,比如说键的长度,也称为周期,是t。将键k写成k=k1···kt,其中每个ki都是字母表中的一个字母。观察到的密文c=c1c2···可以被分为t部分,每个部分可以被视为已经使用移位加密,。
Specifically, for all j ∈ {1, . . . , t} the ciphertext characters
cj , cj+t, cj+2t, . . .

所有这些都是由于通过kj位置移动明文的相应字符。我们将上述字符序列称为第j个流。剩下的就是确定,对于每一个t流,26个可能的移位中的哪一个被使用。这并不像移位密码的情况那么简单,因为不再可能简单地尝试不同的移位,试图确定流的解密何时“有意义”。(回想一下,一个流并不对应于明文中的连续字母。)此外,试图一次猜测整个键k需要通过26t不同的可能性进行强制搜索,这对于大t是不可行的。然而,我们仍然可以使用字母-频率分析来独立地分析每个流。也就是说,对于每个流,我们将每个密文字符的频率制成表格,然后检查26个可能的移位中哪一个产生了该流的“正确”概率分布。由于这可以对每个流独立执行(即对键的每个字符),因此该攻击需要时间26·t,而不是26^t。

当密钥长度已知时,上述任何一种方法都能成功地进行攻击。如果密钥的长度未知怎么办?

  1. 首先要注意,只要密钥的最大长度T不是太大,我们就可以简单地重复上述攻击T次(对于每个可能的值t∈{1,……,T}一次)。这导致最多T个不同的候选明文,其中真正的明文可能很容易识别。所以一个未知的键长度并不是一个严重的障碍
  2. 还有一些更有效的方法可以从观察到的密文中确定密钥长度。一种是使用19世纪中期出版的卡西斯基的方法。这里的第一步是识别密文中长度为2或3的重复模式。这些很可能是在明文中经常出现的某些双字图或三元组合的结果。例如,考虑一下常见的单词“the”。这个字将被映射到不同的密文字符,这取决于它在明文中的位置。但是,如果它在相同的相对位置出现两次,那么它将被映射到相同的密文字符。因此,对于足够长的明文,很有可能“t”将重复映射到相同的密文字符。具体例子如下:
    在这里插入图片描述
    the这个词有时映射到ULE,有时映射到LII,有时映射到XHH。然而,它被两次映射到LII上,并且在一个足够长的文本中,它很可能会被多次映射到每种可能性上。卡西斯基的观察是,这种重复出现(假设它们不是巧合)之间的距离是这个t的倍数。(在上述例子中,周期为5,LII的两次出现之间的距离为30,是t的6倍。)因此,重复序列之间的距离的最大公约数(假设它们不是巧合)将产生密钥长度t或它们的倍数。
  3. 另一种方法,称为符合指数方法,更有系统性,因此更容易自动化。回想一下,如果键的长度为t,那么密文字符 c1, c1+t, c1+2t, . . .在第一个流中,所有的结果都是由于使用相同的移位进行加密。
    这意味着在这个序列中的字符的频率应该与标准英语文本的字符频率相同。更详细地说:让qi表示在这条流中观察到的第i个字母的频率;这只是字母表中第i个字母出现的次数除以流中字母的总数。如果这里使用的移位是j(即,如果k的第一个字符k1等于j),那么对于所有的i,我们期望qi+j≈pi,其中pi是标准英语文本中字母表的第i个字母的频率。(再一次,我们用qi+j代替q[(i+j)mod26]。这意味着序列q0,……,q25只是序列p0,……,p25移动了j个位置。
    ∑ i = 0 25 q i 2 ≈ ∑ i = 0 25 p i 2 ≈ 0.065 \sum_{i=0}^{25}q_i^2\approx \sum_{i=0}^{25}p_i^2\approx 0.065 i=025qi2i=025pi20.065
    这就得到了一个确定密钥长度t的好方法。对于 τ \tau τ=1,2,……,T,看看密文字符的序列c1,c1+ τ \tau τ,c1+2 τ \tau τ,然后计算
    S τ = ∑ i = 0 25 q i 2 S\tau= \sum_{i=0}^{25}q_i^2 Sτ=i=025qi2
    )当 τ \tau τ=t时,我们期望S τ \tau τ≈为0.065,也就是说当S τ \tau τ为0.065时,这个 τ \tau τ在很大程度上就是t。然后可以使用第二个流来进行验证。

Ciphertext length and cryptanalytic attacks.

上述对密码的攻击需要比对以前方案的攻击更长的密文。例如,符合指数法要求c1,c1+t,c1+2t(其中t是实际的键长度)足够长,以确保观察到的频率接近预期的频率;密文本身必须比t大约大t倍。类似地,我们在单字母替换密码上显示的攻击比攻击shift密码需要更长的密码文(它甚至可以对单个单词进行加密)。这说明,一个较长的密钥通常需要密码分析人员获得更多的密文来进行攻击。换句话说,如果密钥足够长,例如和加密的内容一样长,Vigenere密码可以认为是安全的。

1.4 Principles of Modern Cryptography

在过去的几十年里,密码学已经发展成为一门科学。方案现在以更系统的方式开发和分析,最终目标是严格证明一个给定的结构是安全的。为了阐明这样的证明,我们首先需要正式的定义来确定“安全”的确切含义;这样的定义本身是有用和有趣的。事实证明,大多数密码学证明都依赖于目前关于某些数学问题的未经证实的假设;任何这样的假设都必须明确并精确地陈述。强调定义、假设和证明,将现代密码学与经典密码学区分开来;现在我们将更详细地讨论这三个原则。

1.4.1 Principle 1 – Formal Definitions

现代密码学的关键贡献之一是认识到安全的正式定义对于正确地设计、研究、评估和使用密码原语至关重要。
If you don’t understand what you want to achieve, how can you possibly know when (or if ) you have achieved it?
正式的定义通过明确描述范围内的威胁以及需要的安全保证来提供这种理解。因此,定义可以帮助指导加密方案的设计。实际上,最好是在设计过程开始之前形式化所需要的内容,而不是在设计完成后在事后提出一个定义。后一种方法有可能在设计者耗尽耐心时(而不是达到目标时)设计阶段结束,或者可能以牺牲效率为代价实现超过所需要的目标。

定义也提供了一种评估和分析结构的方法。有了定义,就可以研究一个提出的方案,看看它是否达到了期望的保证;在某些情况下,甚至可以通过证明它符合定义来证明给定的构造安全。另一方面,定义可以用来最终证明一个给定的方案是不安全的,只要该方案不满足该定义。特别是,请注意,前一节中的攻击并不能最终证明所显示的任何方案都是“不安全的”。例如,对Vigenere密码的攻击假设足够长的英文文本被加密,但如果短的英文文本或压缩文本(具有大致统一的字母频率)被加密,也许Vigenere密码是“安全的”?如果没有一个正式的定义,这一点很难说。

定义使得能够对方案进行有意义的比较。正如我们将看到的,可以有多种(有效的)方法来定义安全性;“正确的”一个取决于使用方案的上下文。一个满足较弱定义的方案可能比另一个满足较强定义的方案更有效;有了精确的定义,我们就可以正确地评估这两种方案之间的权衡。同样地,定义也支持方案的安全使用。考虑决定对一些更大的应用程序使用哪个加密方案。解决这个问题的一个合理方法是,首先了解该应用程序需要什么安全概念,然后找到一个满足该概念的加密方案。这种方法的一个好处是模块化:设计者可以“交换”一种加密方案,并替换为另一种加密方案(也满足必要的安全定义),而不必担心影响整个应用程序的安全性。

An example: secure encryption

安全的定义是必要的,一般来说,安全定义有两个组成部分:安全保证(或者,从攻击者的角度来看,是什么构成了成功的攻击)和威胁模型。安全保证定义了防止攻击者执行的方案,而威胁模型描述了对手的力量,即假设攻击者能够执行什么行动

security guarantee(安全保证)

  1. 攻击者应该无法恢复密钥。我们之前观察到,如果攻击者可以使用某种方案确定双方共享的密钥,那么该方案就不是安全的。例如,其中Enck(m)=m的方案。密文没有泄露关于密钥的信息(因此如果密钥足够长,密钥就无法恢复),但是消息以明确形势方式发送!因此,我们看到,无法恢复密钥是必要的,但对于安全不是不够的。这是有道理的:加密的目的是保护消息;密钥的保密是实现这一目标的一种手段,但这并不是它本身的目标。
  2. 攻击者应该不可能从密文中恢复明文。这个定义更好,但仍然远不能令人满意。特别是,如果密文显示了90%的明文,只要10%的明文仍然难以识别,那么这个定义将认为加密方案是安全的。这在大多数常见的加密应用中显然是不可接受的;例如,当加密一个工资数据库时,如果90%的员工工资被泄露,那么另外的10%也没有了太大的必要。
  3. 攻击者应该不可能从密文中恢复明文的任何字符。这看起来是一个很好的定义,但仍然不够。回到加密工资数据库的例子,如果一个加密方案显示了员工的工资是否高于或低于10万,我们就不会认为该加密方案是安全的,即使它没有透露任何特定数字的员工的工资。同样,我们不希望加密方案来揭示一个特定员工是否比另一个员工赚得更多
    另一个问题是如何界定对手“恢复明文”。如果攻击者通过纯粹的运气或外部信息,正确地猜测出某人的薪水中最不重要的数字是0呢?显然,这不应该使加密方案不安全,因此任何可行的定义都必须以某种方式排除这种行为,不应该定为成功攻击。蒙对不算对。
  4. 正确”的答案是:无论攻击者已经拥有了任何信息,密文都不应该泄露关于底层明文的其他信息。这个非正式的定义包含了上面概述的所有问题。特别注意,它没有试图定义关于明文的哪些信息是“有意义的”;它只是要求没有信息泄露。这一点很重要,因为这意味着一个安全的加密方案适用于所有需要保密的潜在应用程序
    The “right” answer: regardless of any information an attacker already has, a ciphertext should leak no additional information about the underlying plaintext.

threat model(威胁模型)

  1. Ciphertext-only attack:唯密文攻击,这是最基本的攻击,即对手只观察一个密文(或多个密文),并试图确定关于底层明文(或明文)的信息。
  2. Known-plaintext attack:已知明文攻击,对手能够学习一个或多个使用某些键生成的明文/密文对。然后,对手的目的是推断出关于使用相同的密钥产生的一些其他密文的潜在明文的信息。
  3. Chosen-plaintext attack:选择明文攻击。在这种攻击中,对手可以获得明文/密文对。通过自由选择明文来获取所希望的“明文—密文”对
  4. Chosen-ciphertext attack:选择密文攻击,对手还能够获得(一些关于其选择的密文解密的信息),例如,攻击者选择的某些密文的解密是否会产生有效的英语消息。对手的目标再次是学习关于使用相同密钥生成的一些其他密文(对手无法直接获得其解密)的底层明文的信息。密码分析者除了拥有有限数量的密文外,还有机会使用注入了未知密钥的解密机,通过自由选择密文来获取所希望的“密文—明文”对

前两种攻击类型是最容易进行的。在纯密文攻击中,对手唯一需要做的事情就是窃听发送加密消息的通信通道。在已知明文攻击中,假定对手也获得与已知明文相对应的密文。这通常很容易实现,因为不是所有加密的消息都是秘密的,至少不是无限期的。作为一个微不足道的例子,双方可能总是在他们开始通信时加密一个“你好”消息。作为一个更复杂的例子,加密可以用来保密季度收益报告,直到其发布日期;在这种情况下,任何窃听密文的人以后都会获得相应的明文。
在后两种攻击中,假定对手能够获得其所选择的明文/密文的加密和/或解密。这可能一开始看起来很奇怪,我们将对这些攻击及其实用性的更详细的讨论在3.4.2和5.1节。

1.4.2 Principle 2 – Precise Assumptions

大多数现代密码结构不能无条件地证明是安全的;这样的证明需要解决计算复杂性理论中的问题,而今天似乎还远未得到回答。这种不幸的情况的结果是,安全的证明通常依赖于假设。现代密码学要求任何这样的假设都必须得到明确和数学上的精确。在最基本的层面上,这是因为安全证明需要这一点。但还有其他原因:
Most modern cryptographic structures cannot be proven to be unconditionally secure, and proofs of security usually rely on assumptions.
大多数现代密码结构不能被证明是无条件安全的,而安全性的证明通常依赖于假设。
By their very nature, assumptions are statements that are not proven but are instead conjectured to be true.
就其本质而言,假设是指没有被证明,而是被推测为真实的陈述。

The more the assumption is examined and tested without being refuted, the more confident we are that the assumption is true.Furthermore, study of an assumption can provide evidence of its validity by showing that it is implied by some other assumption that is also widely believed
这个假设被检验而不被反驳的次数越多,我们就越相信这个假设是正确的。此外,对一个假设的研究可以证明它的有效性,表明它被其他一些也被广泛相信的假设所证实。

If the assumption on which the first schemeis based is weaker than the assumption on which the second scheme is based (i.e., if the second assumption implies the first), then the first scheme is preferable since it may turn out that the second assumption is false while the first assumption is true.
如果第一个方案的假设是弱于第二个方案的假设,那么第一个方案是可取的,因为它可能证明第二个假设是错误的,而第一个假设是正确的。换句话说,如果两种方案都被证明满足某种定义,但基于不同的假设,若其他条件相同,取基于较弱假设的那一个方案

低层次的假设可以提供模块化,也更容易被研究和评估。

1.4.3 Principle 3 – Proofs of Security

The two principles just described allow us to achieve our goal of providing rigorous proof that a construction satisfies a given definition under certain assumptions
刚才描述的两个原则使我们能够实现我们的目标,即提供严格的证明,证明一个构造在某些假设下满足给定的定义

summary
依赖于定义、假设和证明构成了一种严格的密码学方法,它不同于经典密码学的非正式方法。不幸的是,没有原则的“即兴”解决方案仍然是由那些希望快速解决问题的人,或者那些只是无知的人设计和部署的。

1.4.4 Provable Security and Real-World Security

不要夸大安全证明的含义
A proof of security is always relative to the definition being considered and the assumption(s) being used.If the security guarantee does not match what is needed, or the threat model does not capture the adversary’s true abilities, then the proof may be irrelevant
安全性的证明总是与正在考虑的定义和正在使用的假设有关。如果安全保证与需要的东西不匹配,或者威胁模型没有捕获对手的真实能力,那么证明可能是不相关的。

关键是,一个方案的可证明安全性并不一定意味着该方案在现实世界中的安全性。虽然有些人认为这是可证明的安全性的一个缺点,但我们乐观地认为这说明了这种方法的优势。为了攻击现实世界中攻击可证明的安全方案,攻击者被迫将注意力集中在定义(即,探索理想化定义与现实世界需求的不同)或潜在假设(即,看看它们是否成立)。反过来,密码学家的工作是不断完善他们的定义,以更接近现实世界,并调查他们的假设来测试它们的有效性。可提供的安全性并没有结束攻击者和防御者之间由来已久的战斗,但它确实提供了一个框架,帮助向防御者获胜。

2. Perfectly Secret Encryption

2.1 Definitions

2.2 The One-Time Pad

2.3 Limitations of Perfect Secrecy

2.4 *Shannon’s Theorem .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值