1
8
这取决于谁在做什么。假设Alice想给Bob发送一条只有Bob才能解码的消息。Alice使用Bob的公钥加密消息(在“公钥”的标准定义下,这意味着除了所有者之外的其他人都知道该公钥)。现在,只有知道Bob的私钥的人(大概,唯一知道Bob的私钥的人实际上是Bob)才能解密Alice给Bob的消息。 如果Alice希望Bob知道只有她可以发送消息,那么她可以使用自己的私钥加密消息,假设Bob知道她的公钥,无论是在用Bob的公钥加密消息之前还是之后。假设她用她的私钥加密消息,然后用Bob的公钥加密结果。要读取消息,Bob必须用他的(Bob的)私钥解密消息,然后用Alice的公钥再次解密结果。如果他现在读到的是合理的文本,他知道知道知道爱丽丝的私钥(大概是爱丽丝)和他的公钥(可能是任何人)的人发送了这条消息。 实际上,不对称算法的计算成本很高,所以您真正要做的是选择一个适当长度的随机会话密钥和一个商定的标准对称加密算法,如AES。然后使用(相对快速的)对称算法对主消息进行加密,并作为消息的一部分发送。消息的另一部分是加密的或双重加密的随机会话密钥。Bob可以解密消息的会话密钥部分以获取会话密钥;然后使用该部分来解密消息的主要部分。 请注意,如果要向许多人发送邮件,则可以对邮件进行一次正确的加密,然后使用收件人的公钥为每个收件人加密一次会话密钥。每个收件人只能使用属于他们的密钥来解密会话密钥信息,但实际上所有人都可以对其进行解密。如果消息很大(比如2 MB的pdf),那么这比用每个接收者的公钥分别加密消息要经济得多。
不;签名是一个单独的操作。如果你读了施耐尔的 Practical Cryptography “,您将看到作者建议使用一对公钥/私钥进行加密,第二对用于签名工作。例如,签名使用签名密钥中的私钥加密原始消息的固定长度哈希。任何知道签名密钥的公钥部分的人都可以解密签名以获取原始消息的散列值。大概,同一个接收者也可以解密消息(使用签名密钥对的公钥),然后可以检查接收到的消息的散列是否与从签名派生的散列相匹配。任何不匹配都表示有问题,应丢弃该消息。 根据安全性要求,有很多方法可以做到这些事情。 但最基本的一点是,一个人知道非对称密钥的私钥,而且可能有许多人知道非对称密钥的公共部分(这是完全安全的)。数据可以由发送方使用收件人公钥加密;也可以由发送方使用自己的私钥加密。接收者可以使用自己的私钥解密接收到的消息,必要时还可以使用发送者的公钥。 这个问题,即使在2009-09-05t13:00-07:00进行了修正,也不完全一致,imnsho。 您应该阅读“实用密码学”中的第13章“RSA”(可能在阅读了前面的一些章节之后,尤其是第3.3节公钥加密)。 加密和解密符号让我们定义一点符号来讨论正统公钥密码术。让我们从基本对称加密开始:
到目前为止,这个符号应用于对称加密,因为在加密和解密中都使用相同的值k。任何知道k的人(以及算法,但是Kerkhoff的“密钥中有秘密”原则意味着你假设攻击者知道算法——任何相反的假设都是加密的“蛇油”)可以解密消息。 使用非对称加密系统,e 一 D 一 是算法A的加密和解密方法。非对称密码的密钥区别特征是密钥K 加密 e使用 一 与K键不同 解密 D使用 一 . 此外,为了实用,推导k必须是计算上不可行的。 解密 即使你知道K 加密 反之亦然。 通过非对称加密,Alice创建了一对密钥, 爱丽丝 ,P 爱丽丝 )按惯例,S 爱丽丝 是密钥和P 爱丽丝 是公钥。注意爱丽丝知道这两把钥匙。重要的是:
同样,Bob将创建一对密钥, 鲍勃 ,P 鲍勃 )注意:
爱丽丝给鲍勃发了个信现在,当爱丽丝想发信息的时候,M 爱丽丝鲍勃 ,为了让鲍勃能读到它(但其他人都不能读),她必须用鲍勃的密钥P加密它。 鲍勃 . 因此,她创造了一个信息:
Bob(从外部证据)知道消息是用p加密的 鲍勃 所以他知道他必须用S解密 鲍勃 :
然而,在这一点上,他所知道的信息是,它来自于一个了解他的P的人。 鲍勃 关键。他不知道它来自爱丽丝,除非是通过外在的证据。 如果Bob和Alice同意对他们的消息进行加密,使他们都确信收到的消息来自另一方,那么他们都必须确信除了Alice以外没有人知道S 爱丽丝 除了鲍勃没有人知道 鲍勃 . 他们还必须确信 爱丽丝 鲍勃和鲍勃都知道 爱丽丝 真的属于爱丽丝 鲍勃 爱丽丝知道,爱丽丝必须相信 鲍勃 确实属于鲍勃。建立这些信任关系是PKI(公钥基础设施)的一个重要组成部分。 假设满足这些条件,那么Alice可以以Bob确信只有Alice可以发送消息的方式向Bob发送消息。如前所述,该机制是双重加密:
爱丽丝发送C2 爱丽丝鲍勃 给Bob(连同一些签名或Mac以确认它在传输过程中没有损坏),然后Bob计算:
如果一切都按计划进行,d2 爱丽丝鲍勃 = m 爱丽丝鲍勃 . RSA密钥对的机制RSA加密算法基于这样一个事实:如果您有两个公开的已知数字(它们是一个公开密钥的两部分),那么指数 E 模量 N号 ,然后给出消息 米 ,很容易计算 C = 米 E 国防部 N号 . 然而,在计算上无法推导 米 仅给出 C (和) E 和 N号 )但是,如果你知道另一个指数, D ,然后你可以神奇地计算 R = C D 国防部 N号 和 R = 米 如果你已经计算了 E ,请 D 和 N号 适当地。计算是不可行的 D 从 E 和 N号 不知道其他信息。 在RSA加密方案下,您开始使用两个(大)随机确定的素数, 磷 和 Q 他们的产品是 N号 . RSA算法是基于这样一个事实,即它非常难考虑 N号 (决定 磷 和 Q 仅给出 N号 );如果有人找到一种简单的分解大数字的方法,那么RSA算法就会立即被破坏。 一旦你拥有 N号 ,需要确定指数 E 和 D 这样:
您可以选择两个值中的一个作为小奇数-Schneier和Ferguson建议 E =3,例如。然后你计算 D 使用他们书中大约6页的计算。通常情况下, D 将是一个相当大的数字。然后您可以发布这对( E ,请 N号 )作为复合公钥,保留值( 磷 ,请 Q ,请 T ,请 D )秘密作为私钥。鉴于 E 和 N号 ,在计算上推导 D 无第一因子分解 N号 . "实用密码术“建议使用两对不同的密码( E 一 ,请 D 一 )和( E 二 ,请 D 二 ,源自同一值 N号 ,你在哪里使用 E 一 加密消息,以及 E 二 对于数字签名,他们甚至建议使用值3和5。 OpenSSL和密钥生成我相信,您对OpenSSL如何生成RSA密钥的描述是混淆的。 生成过程首先必须生成大量随机素数, 磷 和 Q 在上面的符号中。有一些随机方法可以确定一个给定的大数是否是素数;计算两个这样的素数需要一点时间。综合起来,它们首先用于计算 N号 然后 D (假设) E 是由一些惯例确定的)。您在OpenSSL中看到的两个阶段正在确定 N号 ,然后确定 D . 用户案例剖析问题是:
到目前为止,一切都很好。“公开密钥”不是很公开,但没有什么害处。
如果加密技术有用,那么是的;只有Alice和Bob可以阅读Alice用她的密钥加密的消息,因为只有Alice和Bob知道与她的密钥一起使用的公钥。
混乱 :该部分首先讨论Alice向Bob发送消息;现在您已切换到Bob向Alice发送消息。 鲍勃和爱丽丝相遇时,爱丽丝给了鲍勃一张P。 爱丽丝 公钥。据推测,鲍勃也给了爱丽丝他的P 鲍勃 公钥。两个公共密钥的公共流通都非常有限——这很好,但对系统的安全并不重要。 现在,当Bob想给Alice发送消息时,他可以用她的P加密。 爱丽丝 公共密钥,Alice(并且只有Alice)可以使用她的 爱丽丝 秘钥。或者,Bob可以用他的S加密消息 鲍勃 秘密钥匙,爱丽丝可以用鲍勃的密码解密。 鲍勃 公钥。两组加密和解密都可以工作。
用正确的私钥加密和用正确的公钥解密同样可靠,就像用正确的公钥加密和用正确的私钥解密一样。区别在于谁能做哪项手术。如果你清楚地知道谁在加密,谁在解密,谁知道哪个密钥,那么方法的秘密就变得相当清楚了。
嗯,在你的案例中,“公共密钥”并不是所有人都知道的,但这就是所有不寻常的地方。
非对称加密方案的关键是,攻击者(通常称为eve,窃听者)是否知道公钥并不重要。只要私有密钥由Alice和Bob保密,消息就可以安全地发送。但是,您必须理解,如果Alice向Bob发送的消息仅由Alice的密钥加密,那么任何知道Alice的公钥的人(如Eve)都可以阅读该消息。伊芙不能创建一个假消息,除非她也知道秘密密钥-如果伊芙发现爱丽丝的秘密密钥,伊芙可以在她喜欢的任何时候假装爱丽丝。但她能看懂。如果爱丽丝给鲍勃发了一封只有鲍勃的公钥加密的邮件,那么只有鲍勃才能阅读(使用他的秘密密钥),但是鲍勃无法知道这封邮件到底是爱丽丝发的还是伊芙假装爱丽丝发的。这就是为什么你必须努力确保鲍勃知道只有爱丽丝才可以发送信息,而爱丽丝知道只有鲍勃才能阅读信息。 |
2
6
简单地说,因为当您加密某个东西时,您要屏蔽它,以便只有一个人可以阅读它(拥有私钥的人)。你不拥有那个人的私钥,你所拥有的只是他们的公钥。 如果你用你的私钥加密它,任何人都可以用你的公钥解密它-这是签名的原则-他们可以告诉你它是用你的私钥加密的! |
3
3
更明确地说,“使用私钥加密”意味着要解密,需要使用公钥。这不是问题,只是 任何人 然后可以解密您的[insert item here],因为公钥只是: 公众的 . 它对 保护 数据,此系统用于 验证 数据。 例如,艾丽斯想把一份文件发给我(是的,是的,开枪打我)。爱丽丝不在乎别人是否能读她的文件,这不是机密,但她希望鲍勃能确定她发送的是他收到的。然后,她可以用她的私钥加密她的文件,Bob可以用她的公钥解密文件,确保文件没有被篡改。但是如果有人在监听事务,他们也可以解密和读取文件。他们就是改变不了。 对于您提供的情况,更好的方法是在它们相遇时交换密钥,这样实际上有两个密钥对。您自己提到过,如果您尝试使用公钥加密,特别是RSA实际上不会工作,因为算法中进行了优化。如果这是其他算法的常见情况,我不会完全感到惊讶。它们被设计为单向运行(私有/加密、公共/解密),并且是一种已知的“昂贵”操作,因此它们在现实中可能会得到高度优化。 除此之外,我认为你的计划没有任何安全问题…只要钥匙是真正保密的。private/public只是基于典型用法的通用名称。没有什么能强迫你把一把公钥完全公开。在您的案例中,您可能希望将它们称为“加密密钥”和“解密密钥”,但我不会将每一个密钥都用于这两者。事实上,我建议你在你的程序中这样称呼他们,理由是乔纳森·莱弗勒在他的评论中给出的:
|
4
1
我认为您遗漏了公钥/私钥加密的要点(至少据我所知)。 在这种情况下,对称加密也可以工作。使用非对称加密的原因是规模问题。
假设你有,不仅仅是鲍勃和爱丽丝,还有想象中字母表中每一个字母的人。这些人希望能够向任何人发送消息,确保只有收件人才能阅读。使用一个普通的对称加密,这需要每个人之间共享一个密钥,所以如果我们有来自字母小镇的26个人,也就是说
输入对称(即公钥/私钥)加密。现在每个人都有一个普通规则的私钥和一个公钥。要向Fred发送消息,您可以查看他的(只有一个)公钥。然后你给他发信息。只有弗雷德能阅读这封信。在这个计划中,你有
按照您描述的方式使用非对称加密,每一组人都需要一对密钥。
所以,这也是关于可伸缩性的。对称方案所需的密钥数为
|
5
0
我不知道是否有版权问题,但我会引用“瓦莱里·普雷米科夫” 从 this forum .
|
6
0
你误用了这里的术语。 如果密钥是真正的私有和公共的,那么是的,任何用私有密钥加密的东西都只能用公共密钥解密,但是如果密钥是真正的公共的,任何人都可以解密它。 让我们无视这一点。 这里的问题是鲍勃知道的。鲍勃真的知道艾丽斯是否把她的公开钥匙寄给了其他人吗?如果没有,他就不能确保只有他才能解密消息。技术中没有任何东西可以确保这一点。任何被Alice私钥加密的东西都可以被她的公钥解密,因此任何拥有该密钥的人都可以解密。就公共钥匙的性质而言,应该是任何人。 确保Bob的消息只能由Bob解密的唯一方法是Bob向Alice提供他的公钥,并使Alice通过他的公钥加密她要发送给Bob的所有内容,这将使Bob以外的任何人都无法解密数据。她是否也用自己的私钥加密相同的数据(即在数据上签名)是不重要的。 当然,鲍勃也不知道爱丽丝没有向其他人发送完全相同的消息,而是为其他人的公钥加密。 |
Farid · 限制django每个客户的访问 2 年前 |
josegp · 在Nmap中-p-tag是什么意思 2 年前 |
kramer65 · 如何根据网站用户在S3上添加非公共网站文件? 6 年前 |
derf26 · 如何阻止React Web包包含包中的脚本。json 6 年前 |
user8663960 · 最好也是最简单的方法是保护登录表单的安全 6 年前 |