文章目录前言计算机网络中的安全什么是网络安全密码学的原则对称密钥密码体制公开密钥加密参考目录前言阅读本文前请注意最后编辑时间文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论与私信指出错误或是进行交流等。本文是关于《计算机网络自顶向下方法第七版》的学习分享内容书写顺序也是按照书中的顺序。本文并不会提及书中的所有内容主要写重点的知识以及自己感兴趣的内容。会对原文中的内容进行一定的精简或者加上个人的理解。计算机网络中的安全什么是网络安全安全通信具有下列所需要的特性。机密性 (confidentiality) 。 仅有发送方和希望的接收方能够理解传输报文的内容。因为窃听者可以截获报文这必须要求报文在一定程度上进行加密 (encrypted) , 使截取的报文无法被截获者所理解。报文完整性 (message integrity) 。 通信的内容在传输过程中未被改变——或者恶意篡改或者意外改动。 我们在可靠传输和数据链路协议中遇到的检验和技术在扩展后能够用于提供这种报文完整性端点鉴别 (end-point authentication) 。 发送方和接收方都应该能证实通信过程所涉及的另一方以确信通信的另一方确实具有其所声称的身份。 人类的面对面通信可以通过视觉识别轻易地解决这个问题。 当通信实体在不能看到对方的媒体上交换报文时鉴别就不是那么简单了。运行安全性 (operational security) 。 几乎所有的机构公司 、大学等今天都有了与公共因特网相连接的网络。 这些网络都因此潜在地能够被危及安全。 攻击者能够试图在网络主机中安放蠕虫获取公司秘密勘察内部网络配置并发起DoS攻击。 诸如防火墙和入侵检测系统等运行设备正被用于反制对机构网络的攻击。 防火墙位于机构网络和公共网络之间控制接入和来自网络的分组。 入侵检测系统执行“深度分组检查“任务向网络管理员发出有关可疑活动的警告。明确了我们所指的网络安全的具体含义后接下来考虑入侵者可能要访问的到底是哪些信息以及入侵者可能采取哪些行动。 下图阐述了一种情况。 Alice (发送方想要发送数据给Bob (接收方。 为了安全地交换数据即在满足机密性、 端点鉴别和报文完整性要求的情况下 Alice和 Bob 交换控制报文和数据报文 以非常类似于TCP 发送方和接收方双方交换控制报文和数据报文的方式进行。 通常将这些报文全部或部分加密。 入侵者能够潜在地执行下列行为窃听监听并记录信道上传输的控制报文和数据报文修改、插入或删除报文或报文内容。如我们将看到的那样、除非采取适当的措施否则上述能力使入侵者可以用多种方式发动各种各样的安全攻击 窃听通信内容可能窃取口令和数据假冒另一个实体劫持“ 一个正在进行的会话通过使系统资源过载拒绝合法网络用户的服务请求等等。已经知道在因特网中某处的确存在真实的威胁则 Alice 和 Bob (两个需要安全通信的朋友在因特网上的对应实体是什么呢当然 Alice 和 Bob 可以是位于两个端系统的人类用户例如真实的Alice 和真实的 Bob 真的需要交换安全电子邮件。 他们也可以参与电子商务事务。 例如真实的 Bob希望安全地向一台 Web服务器传输他的信用卡号码以在线购买商品。 类似地真实的 Alice要与银行在线交互。 需要安全通信的各方自身也可能是网络基础设施的一部分。 前面讲过域名系统 (DNS或交换路由选择信息的路由选择守护程序需要在两方之间安全通信。 对于网络管理应用也有相同的情况 主动干扰DNS查找和更新、路由选择计算或网络管理功能的入侵者能够给因特网造成不可估量的破坏建立了上述框架明确了一些重要定义以及网络安全需求之后我们将深入学习密码学。 应用密码学来提供机密性是不言而喻的同时我们很快将看到它对于提供端点鉴别报文完整性也起到了核心作用这使得密码学成为网络安全的基石。密码学的原则尽管密码学的漫长历史可以追溯到朱利叶斯· 凯撒 (Julius Caesar) 时代但现代密码技术包括今天的因特网中正在应用的许多技术基于过去30年所取得的进展。 我们只能初步了解密码学的基本方面特别是因为这些东西正在今天的因特网上发挥作用。 我们也注意到尽管本节的重点是密码学在机密性方面的应用但我们将很快看到密码学技术与鉴别、报文完整性和不可否认性等是紧密相关的。密码技术使得发送方可以伪装数据使入侵者不能从截取到的数据中获得任何信息。当然接收方必须能够从伪装的数据中恢复出初始数据。 下图说明了一些重要的术语。现在假设Alice 要向 Bob 发送一个报文。 Alice 报文的最初形式例如 “Bob, I love you. Alice”) 被称为明文 (plaintext, cleartext) 。Alice 使用加密算法 (encryption algorithm) 加密其明文报文生成的加密报文被称为密文 (cipherlext) , 该密文对任何入侵者看起来是不可懂的。 有趣的是在许多现代密码系统中包括因特网上所使用的那些加密技术本身是已知的即公开发行的、标准化的和任何人都可使用的, 即使对潜在的入侵者也是如此 显然如果任何人都知道数据编码的方法则一定有一些秘密信息可以阻止入侵者解密被传输的数据。 这些秘密信息就是密钥。在图中 Alice 提供了一个密钥 (key) KA, 它是一串数字或字符作为加密算法的输入。 加密算法以密钥和明文报文m为输入生成的密文作为输出。 用符号KA(m) 表示使用密钥KA加密的明文报文m的密文形式。 类似地 Bob将为解密算法 (decryption algorithm) 提供密钥 KB将密文和 Bob 的密钥作为输入输出初始明文。 也就是说如果Bob接收到一个加密的报文KA(m) , 他可通过计算KB(KA (m)) m 进行解密。 在对称密钥系统 (symmetric key system) 中 Alice 和 Bob的密钥是相同的并且是秘密的。 在公开密钥系统 (public key system, 也称为公钥系统中使用一对密钥 一个密钥为Bob和Alice 俩人所知实际上为全世界所知另一个密钥只有Bob 或 Alice 知道而不是双方都知道。对称密钥密码体制所有密码算法都涉及用一种东西替换另一种东西的思想。例如取明文的一部分进行计算替换适当的密文以生成加密的报文。在分析现代基于密钥的密码系统之前我们首先学习一下凯撒密码 (Caesar cipher) 找找感觉这是一种加密数据的方法。这种非常古老而简单的对称密钥算法由 Julius Caesar发明。凯撒密码用于英语文本时将明文报文中的每个字母用字母表中该字母后第k个字母进行替换允许回绕即把字母 “a” 排在字母 “z” 之后。 例如如果k:3, 则明文中的字母 “a” 变成密文中的字母 “d”; 明文中的字母 “b” 变成密文中的字母e 依此类推。 因此 k 的值就作为密钥。 举一个例子明文报文 “bob, i love you. alice 在密文中变成 ”ere , l oryh brx, dolfh 。 尽管密文看起来像乱码但如果你知道使用了凯撒密码加密因为密钥值只有25个所以用不了多久就可以破解它。凯撒密码的一种改进方法是单码代替密码, 即使用字母表中的一个字母替换该字母表中的另一个字母。 然而并非按照规则的模式进行替换例如明文中的所有字母都用偏移量为k 的字母进行替换只要每个字母都有一个唯一的替换字母任一字母都可用另一字母替换反之亦然。如下为加密明文的一种可行替换规则。明文报文 “bob, i love you. alice., 变成 nkn, s gktc wky. mgsbc” - 因此、与用凯撒密码情况一样这看起来像乱码单码代替密码的性能看来要比凯撒密码的性能好得多可能的字母配对为26!10^26数量级 而不是25 种。尝试所有可能配对的蛮力法要求的工作量太大不是一种破解加密算法和解密报文的可行方式。 但是通过对明文语言进行统计分析例如在典型的英语文本中由于已知字母 “e” 和字母 “t” 出现的频率较高这些字母出现的频率分别为 13%和9%)并且常见的两三个字母的组合通常一起出现例如 “in” “it” “the” “ion” “ing” 等等这就使得破解该密文变得相对容易。 如果入侵者具有该报文相关内容的知识则破解该密码就会更为容易。例如如果入侵者 Trudy 是 Bob 的妻子怀疑 Bob 和 Alice 有暧昧关系则她猜想 “bob” 和alice 这些名字可能会出现在密文中。 如果 Trudy 确信这两个名字出现在密文中并有了上述报文的密文副本则她能够立即决定这26 个字母配对中的7 个比蛮力法少检查多种可能性。当考虑Trudy 破解 Bob 和 Alice 之间加密方案的难易程度时可以根据入侵者所拥有的信息分为三种不同的情况。唯密文攻击。 有些情况下入侵者只能得到截取的密文也不了解明文报文的内容。我们已经看到统计分析有助于对加密方案的唯密文攻击 (ciphertext-only attack)。已知明文攻击。 前面已经看到如果Trudy 以某种方式确信在密文报文中会出现bob 和 “alice” , 她就可以确定字母 a、 l、 i、 c、 e、 b 和 o 的 明文密文匹配关系。 Trudy 也可能会幸运地记录下传输的所有密文然后在一张纸上找到Bob 写下的已解密的明文。 当入侵者知道明文密文的一些匹配时我们将其称为对加密方案的已知明文攻击 (known-plaintext attack) 。选择明文攻击。 在选择明文攻击 (chosen-plain text attack) 中 入侵者能够选择某一明文报文并得到该明文报文对应的密文形式。 对于我们前面所说的简单加密算法来说500 年前发明了多码代替密码 (polyalphabetic encryption) , 这种技术是对单码代替密码的改进。 多码代替密码的基本思想是使用多个单码代替密码一个单码代替密码用于加密某明文报文中一个特定位置的字母。 因此在某明文报文中不同位置出现的相同字母可能以不同的方式编码。 下方显示了多码代替密码机制的一个例子。 它使用两个凯撒密码其中 k 5 和k19), 如图中不同的行所示。 我们可以选择使用这两个凯撒密码C1 和C2 。加密时采用以 C1 , C2, C2, C1 , C2 的次序循环的模式 即明文的第一个字母用 C1 编码第二和第三个字母用C2 编码第四个字母用 C1编码第五个字母用 C2 编码 然后循环重复该模式依此类推。 在这个例子中 加密和解密 “密钥”是两个凯撒密码密钥 (k5 和k 19) 和 c1 , c2 , c2 , c1 , c2 的次序模式的知识。块密码我们现在回到现代社会中考察对称密钥加密的工作方式。对称加密技术有两种宽泛的类型流密码 (stream cipher) 和块密码 (hlock cipher) 。 在本节中我们关注块密码该密码用在多种因特网协议的加密中包括PGP (用于安全电子邮件、 SSL (用于使TCP连接更安全和 IPsec (用于使网络层传输更安全。在块密码中要加密的报文被处理为K 比特的块。例如k64, 则报文被划分为64 比特的块 每块被独立加密。 为了加密一个块该密码采用了一对一映射将K 比特块的明文映射为K 比特块的密文。 我们来看一个例子。 假设k3, 因此块密码将3 比特输入 明文映射为3 比特输出 密文。 下表给出了一种可能的映射。 注意到这是一个一对一的映射即对每种输入有不同的输出。 这种块密码将报文划分成3 比特的块并根据映射关系进行加密。 可以验证报文0101 1 000 1 1 1 1 被加密成了 101000111001 。继续这个3 比特块的例子注意到上述映射只是许多可能映射中的一种。 有多少种可能的映射呢要回答这个问题观察到一个映射只不过是所有可能输入的排列。 共有8 种可能的输入 排列在“输入”栏中。 这 8 种输入能够排列为 8! 40 320 种不同方式。 因此这些排列的每种都定义了一种映射 共有40320种可能的映射。 我们能够将这些映射的每种视为一个密钥即如果Alice 和Bob都知道该映射密钥他们能够加密和解密在他们之间发送的报文。对这种密码的蛮力攻击即通过使用所有映射来尝试解密密文。 仅使用40320种映射当 k 3) , 这能够在一台桌面PC 上迅速完成。 为了挫败蛮力攻击块密码通常使用大得多的块由 64 比特甚至更多比特组成。 注意到对于通常的K 比特块密码即使不大的K值如k64) , 映射数量也是一个天文数字。如刚才所述 尽管块密码对于不大的K值能够产生健壮的对称密钥加密方案但不幸的是它们难以实现。 对于k64和给定的映射将要求Alice和 Bob维护一张具有2^64个输入值的表这是一个难以实现的任务。 此外如果Alice和 Bob要改变密钥他们将不得不每人重新生成该表。 因此块密码在所有输入和输出之间提供了预先决定的映射如在上述例子中那样这简直是不可能实现的事。取而代之的是块密码通常使用函数模拟 随机 排列表。 在下图中显示了当k64时这种函数的一个例子。 该函数首先将 64 比特块划分为 8 个块每个块由 8 比特组成。 每个8 比特块由一个 8 比特到8 比特”表处理这是个可管理的长度。 例如第一个块由标志为T1 的表来处理。 接下来这8个输出块由置乱函数打乱顺序后再装配成一个64 比特的块。 该输出被回馈到64 比特的输入 开始了第二次循环。 经n次这样的循环后该函数提供了一个64 比特的密文块。 这种循环的目的是使得每个输入比特影响最后输出比特的大部分 即使不是全部。 这种块密码算法的密钥将是8张排列表假定置乱函数是公共已知的。目前有一些流行的块密码包括DES (Data Encryption Standard , 数据加密标准、3DES 和 AES (Advanced Encryption Standard , 高级加密标准 。 这些标准都使用了函数 而不是预先决定的表。 这些算法也都使用了比特串作为密钥。 一个算法的密钥决定了特定“小型表”映射和该算法内部的排列。 对这些密码进行蛮力攻击要循环通过所有密钥用每个密钥应用解密算法。 如果用 1 秒破解56 比特 DES 的计算机 就是说每秒尝试所有256个密钥来破解一个128 比特的 AES 密钥要用大约 149 万亿年的时间才有可能成功。密码块链接在计算机网络应用中通常需要加密长报文或长数据流。 如果使用前面描述的块密码通过直接将报文切割成K 比特块并独立地加密每块将出现一个微妙而重要的问题。 为了理解这个问题注意到两个或更多个明文块可能是相同的。 例如两个或更多块中的明文可能是 HTTP/1.1。 对于这些相同的块块密码当然将产生相同的密文。 当攻击者看到相同的密文块时它可能潜在地猜出其明文并且通过识别相同的密文块和利用协议结构的知识甚至能够解密整个报文。为了解决这个问题可以在密文中混合某些随机性使得相同的明文块产生不同的密文块。 为了解释这个想法令m(i) 表示第 i个明文块 c(i) 表示第 i个密文块并且a⊕b表示两个比特串 a 和 b 的异或 (XOR)。 两个比特串的异或是逐位进行的。 例如 10101010 ⊕ 11110000 01011010。)另外将具有密钥S的块密码加密算法表示为Ks。 其基本思想如下发送方为第i块生成一个随机的K 比特数r(i) , 并且计算c(i) Ks(m(i)⊕r(i)) 。 注意到每块选择一个新的K比特随机数。 则发送方发送c(1) 、 r(1) 、 c(2) 、 r(2) 、 c(3) 和 r(3) 等等。 因为接收方接收到c(i) 和 r(i) , 它能够通过计算 m(i) Ks(c(i)⊕r(i)) 而恢复每个明文块。 重要的是注意到下列事实 尽管r(i) 是以明文发送的并且因此能被嗅探到但她无法获得明文m(i), 因为她不知道密钥Ks。 同时注意到如果两个明文块rn(i)和 m(j) 是相同的对应的密文块c(i) 和c(j) 将是不同的只要随机数r(i) 和r(i)不同这种情况出现的概率将很高精明的读者将注意到引入随机性解决了一个问题而产生了另一个问题 Alice 必须传输以前两倍的比特。 实际上对每个加密比特她现在必须再发送一个随机比特使需要的带宽加倍。 为了有效利用该技术块密码通常使用了一种称为密码块链接(Cipher Block Chaining, CBC) 的技术。 其基本思想是仅随第一个报文发送一个随机值然后让发送方和接收方使用计算的编码块代替后继的随机数。 具体而言 CBC运行过程如下1 ) 在加密报文或数据流之前发送方生成一个随机的K 比特串称为初始向量(Initialization Vector, IV) 。 将该初始向量表示为 c(0) 发送方以明文方式将 IV 发送给接收方。2 ) 对第一个块发送方计算m(1)⊕c(0), 即计算第一块明文与 IV 的异或。然后 对异或得到的结果 通过块密码算法 得到对应的密文块即c(1) Ks(m(1)⊕c(0)), 发送方向接收方发送加密块c(1)。3 ) 对于第i个明文块发送方根据c(i) Ks(m(i)⊕c(i-1)) 生成第 i 个密文块。我们现在来考察使用这种方法后发生的事。 首先接收方将仍能够恢复初始报文。 毫无疑问 当接收方接收到c(i) 时它使用Ks解密得到s(i) m(i)⊕c(i-1) ; 因为接收方已经知道c(i-1), 则进行 m(i) s(i)⊕c(i-1) 计算获得明文块。 第二即使两个明文块是相同的 相应的密文块也几乎总是不同的。 第三虽然发送方以明文发送 IV, 入侵者将仍不能解密密文块 因为该入侵者不知道秘密密钥S。 最后发送方仅发送一个最前面的块即IV), 因此对由数百块组成的长报文而言增加的带宽用量微不足道。公开密钥加密从凯撒密码时代直到20世纪70年代的两于多年以来加密通信都需要通信双方共享一个共同秘密 即用于加密和解密的对称密钥。 这种方法的一个困难是两方必须就共享密钥达成一致 但是这样做的前提是需要通信可假定是安全的可能是双方首先会面人为协商确定密钥 此后才能进行加密通信。但是在网络世界中通信各方之间可能从未见过面 也不会在网络以外的任何地方交谈。此时通信双方够在没有预先商定的共享密钥的条件下进行加密通信吗? 1976 年Diffie 和 Hellman论证了一个解决这个问题的算法现在称为 Diffie-Hellman密钥交换 这是个完全不同、极为优雅的安全通信算法开创了如今的公开密钥密码系统的发展之路。 我们很快就会看到公开密钥密码系统也有许多很好的特性使得它不仅可以用于加密还可以用于鉴别和数字签名。公开密钥密码的使用在概念上相当简单。 假设 Alice要和 Bob 通信。 如下图所示这时Alice 和 Bob 并未共享一个密钥如同在对称密钥系统情况下 而Bob (Alice 报文的接收方则有两个密钥一个是世界上任何人包括入侵者) 都可得到的公钥(public key) , 另一个是只有 Bob 知道的私钥 (private key) 。 我们使用符号Kb和Kb-来分别表示Bob 的公钥和私钥。 为了与 Bob 通信 Alice 首先取得 Bob 的公钥然后用这个公钥和一个众所周知的已标准化的加密算法加密她要传递给Bob的报文m; 即Alice 计算 KB(m) 。 Bob 接收到 Alice 的加密报文后用其私钥和一个众所周知的已标准化的解密算法解密Alice 的加密报文即 Bob计算 KB-(KB(m))。 后面我们将看到存在着可以选择公钥和私钥的加密解密算法和技术使得KB-KB(m)) m; 也就是说用 Bob 的公钥加密报文 , 然后再用 Bob 的私钥解密报文的密文形式就能得到最初的明文。 这是个不寻常的结果用这种办法 Alice 可以使用 Bob 公开可用的密钥给 Bob 发送机密信息而他们任一方都无须分发任何密钥我们很快能够看到公钥和私钥加密相互交换同样能够得到不寻常的结果即 KB(KB- (m)) KB- (KB (m)) m因此公开密钥密码体制的使用在概念上是简单的。 但是有两点必须要注意。 首先应关注的是尽管入侵者截取到 Alice 的加密报文时看到的只是乱码但是入侵者知道公钥显然 Bob 的公钥是全世界都可以使用的和 Alice加密所用的算法。 Trudy 可以据此发起选择明文攻击使用已知的标准加密算法和Bob 的公开可用的加密密钥对她所选择的任意报文编码例如 Trudy 可以尝试 怀疑 Alice 可能发送的全部报文或部分报文编码。 很明显要使公开密钥密码能工作密钥选择和加密解密算法必须保证任意入侵者都不能至少要困难得几乎不可能确定出 Bob 的私钥或者以某种方式解密或猜出 Alice发给 Bob的报文。 第二个值得关注的问题是既然 Bob 的加密密钥是公开的任何人包括 Alice和其他声称自己是Alice 的人都可能向 Bob 发送一个已加密的报文。在对称密钥情况下发送方知道共享秘密密钥的事实就已经向接收方隐含地证实了发送方的身份。 然而在公钥体制中这点就行不通了因为任何一个人都可向 Bob发送使用 Bob 的公开可用密钥加密的报文。 这就需要用数字签名把发送方和报文绑定起来RSA尽管有许多算法处理这些关注的问题但 RSA算法 (RSA algorithm, 取算法创立人Ron Rivest、 Adi Shamir 和 Leonard Adleman 的首字母命名几乎已经成了公开密钥密码的代名词。 我们首先来理解RSA是如何工作的然后再考察RSA 的工作原理。RSA 广泛地使用了模n算术的算术运算。 故我们简要地回顾一下模算术。 前面讲过x mod n 只是表示x 被 n 除时的余数 因此如 19 mod 5 4。 在模算术中人们执行通常的加法、乘法和指数运算。 然而每个运算的结果由整数余数代替该余数是被n除后留下的数。 对于模算术的加法和乘法可由下列便于施用的事实所简化从第三个事实推出我们很快将会发现这个恒等式是非常有用的。现在假设Alice 要向 Bob 发送一个RSA加密的报文。 在我们的讨论中心中永远要记住一个报文只不过是一种比特模式并且所有比特模式能唯一地被一个整数表示。 例如假设一个报文是比特模式1001; 这个报文能由十进制整数9来表示。 所以当用RSA加密一个报文时等价于加密表示该报文的这个唯一的整数。意思是RSA对1001加密等同于对十进制的 9加密RSA 有两个互相关联的部分公钥和私钥的选择。加密和解密算法。为了生成RSA 的公钥和私钥 Bob执行如下步骤选择两个大素数p 和 q。 那么p 和q 应该多大呢该值越大破解 RSA越困难而执行加密和解密所用的时间也越长。 RSA实验室推荐公司使用时 p 和 q 的乘积为1024 比特的数量级。计算npq 和 z (p -1) (q - 1) 。选择小于 n 的一个数e, 且使e和z没有非1的公因数。 这时称e与z互素。使用字母e表示是因为这个值将被用于加密。求一个数 d, 使得 ed- 1 可以被z整除就是说没有余数。 使用字母d表示是因为这个值将用于解密。 换句话说给定e, 我们选择d, 使得 ed mod z 1Bob 使外界可用的公钥KB 是一对数 (n, e), 其私钥KB- 是一对数 (n, d)Alice 执行的加密和 Bob 进行的解密过程如下假设Alice 要给 Bob 发送一个由整数m表示的比特组合且mn。 为了进行编码Alice 执行指数运算m e 然后计算 m e 被 n 除的整数余数 m^e然后计算m^e被 n除的整数余数me然后计算me被n除的整数余数换言之 Alice 的明文报文m的加密值c就是c m e m o d n c m^e mod ncmemodn对应于这个密文c 的比特模式发送给Bob。为了对收到的密文报文c解密 Bob计算m c d m o d n m c^d mod nmcdmodn这要求使用他的私钥 (n, d)会话密钥这里我们注意到 RSA 所要求的指数运算是相当耗费时间的过程。 形成对比的是DES 用软件实现要比 RSA 快 100 倍用硬件实现则要快 1000 ~ 10000 倍 。 所以在实际应用中 RSA 通常与对称密钥密码结合起来使用。 例如如果Alice要向 Bob 发送大量的加密数据她可以用下述方式来做。 首先 Alice选择一个用于加密数据本身的密钥这个密钥有时称为会话密钥 (session key) , 表示为 Ks。这个会话密钥一般是临时随即生成的当Alice和Bob要通信的时候生成。Alice 必须把这个会话密钥告知 Bob, 因为这是他们在对称密钥密码中所使用的共享对称密钥。 Alice 可以使用 Bob 的 RSA公钥来加密该会话密钥即计算 c(Ks^e mod n。 Bob 收到了该RSA 加密的会话密钥 c 后解密得到会话密钥Ks。 Bob此时已经知道Alice 将要用于加密数据传输的会话密钥了。随后双方开始通信这个时候双方给报文使用的是对称密钥方式加密解密使用的是会话密钥Ks。而不使用公开密钥进行加密解密来通信。RSA 的工作原理不作介绍RSA 加密解密看起来相当神奇 为什么那样应用加密算法然后再运行解密算法就能恢复出初始报文呢RSA 的安全性依赖于这样的事实目前没有已知的算法可以快速进行一个数的因数分解这种情况下公开值n无法快速分解成素数p和q如果已知p 和q, 则给定公开值e,就很容易计算出秘密密钥d。参考目录书籍《计算机网络自顶向下方法第七版》