为什么我们不应该在非对称加密系统中使用私钥加密?

vaa*_*aab 3 security signing encryption-asymmetric

在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密.

反过来,"使用私钥加密"称为"签名".

尽管术语和缺乏直接工具,标准工具允许实现使用私钥进行加密的加密系统.

任何人都可以清楚地解释为什么这样的解决方

用户案例:

考虑到Alice想以非传统的方式向Bob发送一些东西:

爱丽丝和鲍勃见过面,爱丽丝给了鲍勃一张她创建的私钥生成的"公钥",但她警告鲍勃要保守秘密.她一直保密私钥,并没有把公钥给别人.

Bob可以确定他从Alice收到的消息(如果这些消息是由Alice私钥加密的)只能由他读取(假设他真的保留了他的Alice公钥密钥的副本)吗?

而如何比较这种加密坚固的传统方式,这将在我们的情况下,被鲍勃发送消息给Alice(由Alice的公钥加密的)?

问题是什么

非对称密钥被命名为"私有"和"公共"的事实无助于理解我的问题.密钥具有基础属性,它是我广播"公钥",赋予它"公共"属性.请在回答之前明确区分:我不考虑这些密钥的"公共"和"私有"属性,而是"私钥"加密与"公钥"加密的可靠性.

即使在这种特殊情况下它具有误导性,我也不能使用其他术语.

我知道这种情况是非传统的,并且可能导致一些不一致,或者不是非对称加密系统的问题,因为Bob和Alice在这里分享某种共同的秘密,而这不是不对称加密的重点.

我看到了几个Stackoverflow答案,表明"私钥"和"公钥"是可交换的(只需阅读下面的答案).这不是真正的RSA,因为它是微不足道的生成密钥的公共密钥,这保证不会是倒过来计算是可行的.对于非信徒,使用RSA在openssl中生成密钥的过程是:

  1. 生成一个密钥
  2. 从密钥中提取公钥.

如果有"私用密钥"和"公共密钥"之间这么大的差异,有没有与传统的"公共密钥"加密"私钥"加密之间的坚固区别?

长期选择答案的简短回答

对"私钥"究竟是什么的误解并没有帮助我."私钥"有两种不同的定义."实用私钥"和"理论私钥".

RSA理论的理论私钥与公钥共享数学对称性:

  • 你不能从另一个中推断出一个
  • 加密在任何一种方式都同样可靠

来自RSA工具的实用私钥(如openssl)包含了出于效率原因的附加信息,通常,公钥的一部分甚至按惯例设置.这些假设打破了对称性:

  • 从"实用私钥"获取公钥是微不足道的
  • 但加密仍然同样坚实

有关更多详细信息,请参阅所选答案!如果误解仍然存在,请评论......

编辑说明:

  • 非对称加密系统密钥对经常被宣传为可交换(即使在当前的堆栈溢出答案中),我试图引起反思这可能是危险的误解,因为在REAL生活工具中并非如此.
  • 添加了用户案例,我希望这会澄清我的问题
  • 添加了最终的"简答题"

Jon*_*ler 9

在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密.

这取决于谁在做什么.假设Alice想要向Bob发送消息,只有Bob可以解码.Alice使用Bob的公钥加密消息(在"公钥"的标准定义下,意味着除了其所有者之外的人所知道的那个).现在只有知道Bob的私钥的人(可能是唯一知道Bob的私钥的人实际上是Bob)可以解密Alice给Bob的消息.

如果Alice希望Bob知道只有她可以发送它,她可以使用自己的私钥加密消息,假设Bob在使用Bob的公钥加密消息之前或之后知道她的公钥.我们假设她用她的私钥加密消息,然后用Bob的公钥加密结果.为了阅读该消息,Bob必须用他的(Bob's)私钥解密该消息,然后用Alice的公钥再次解密该结果.如果他所读的内容现在是明智的文本,他知道有人知道Alice的私钥(可能是Alice)和他的公钥(可能是任何人)都发送了该消息.

在实践中,非对称算法的计算成本很高,因此您真正要做的是选择适当长度的随机会话密钥和商定的标准对称加密算法(如AES).然后使用(相对快速)对称算法对主消息进行加密,并将其作为消息的一部分发送.消息的另一部分是加密或双重加密的随机会话密钥.Bob可以解密消息的会话密钥部分以获得会话密钥; 然后,他使用它来解密消息的主要部分.

请注意,如果要向许多人发送消息,则可以对消息使用一次加密,然后使用收件人的公钥为每个收件人加密一次会话密钥.每个收件人只能使用属于他们的密钥解密会话密钥信息,但所有人都可以实际解密它.如果消息很大(例如2 MB的PDF),那么这比使用每个收件人公钥单独加密消息要经济得多.

反过来,"使用私钥加密"称为"签名".

没有; 签名是一项单独的操作.如果您阅读Schneier的" 实用密码学 ",您会看到作者建议使用一个公钥/私钥对进行加密,第二对用于签名工作.例如,签名使用来自签名密钥的私钥来加密原始消息的固定长度散列.知道签名密钥的公钥部分的任何人都可以解密签名以获得原始消息的散列.据推测,相同的接收者也可以解密该消息(使用签名密钥对的公钥),然后可以检查所接收的消息的散列是否与从签名导出的散列相匹配.任何不匹配都表示存在问题,应丢弃该消息.

有很多方法可以做这些事情 - 取决于安全要求.

但基本的观点是,一个人知道非对称密钥的私钥,并且可能有许多人知道非对称密钥的公共部分(这是非常安全的).发件人可以使用收件人公钥加密数据; 它也可以由发件人使用他们自己的私钥加密.收件人可以使用自己的私钥解密收到的邮件,并在必要时使用发件人的公钥解密.


这个问题,即使在2009-09-05T13:00-07:00大约修正,也不完全连贯,IMNSHO.

您应该阅读"实用密码学"中的第13章"RSA"(可能在阅读了一些前面的章节之后 - 最值得注意的是3.3公共密钥加密).

加密和解密的表示法

让我们为讨论正统的公钥密码学定义一些符号.让我们从基本的对称加密开始:

  • C = E(K,m)是加密算法E使用密钥K(明文)消息m生成的加密消息(密文C).
  • P = D(K,C)是由解密算法D使用密钥K on(加密)消息c发现的明文消息(明文P).
  • 为了成为一个工作系统,m = P,所以D(K,E(K,m))= m.

到目前为止,这种表示法适用于对称加密,因为在加密和解密中使用相同的值K. 任何知道K的人(和算法,但Kerckhoff的原则'保密在钥匙中'意味着你假设攻击者知道算法 - 任何相反的假设是加密'蛇油')可以解密消息.

对于非对称加密系统,E a和D a是算法A的加密和解密方法.非对称加密密码的关键区别特征是E a使用的密钥K 加密不同于D使用的密钥K 解密.a.此外,实际上,即使你知道K 加密,推断K 解密也必然在计算上是不可行的,反之亦然.

通过非对称加密,Alice创建了一对密钥(S alice,P alice).传统上,S alice是秘密密钥,P alice是公钥.请注意,Alice知道两个键.重要的是:

  1. 小号爱丽丝和P 爱丽丝是不同的.
  2. 爱丽丝不会让任何人知道其中一个键(S alice); 至关重要的是,其他任何人都不知道这些信息.
  3. Alice可以让其他人知道另一个密钥(P alice),而不会影响系统的安全性.

同样,Bob会创建一对键(S bob,P bob).注意:

  • 鲍勃知道钥匙S bob,P bob和P alice.
  • 爱丽丝知道钥匙S alice,P alice和P bob.

Alice向Bob发送消息

现在,当Alice想发送一条消息,男爱丽丝,鲍勃,鲍勃让鲍勃可以读取它(但没有其他人可以),她已经把它与Bob的P键加密鲍勃.所以,她创建了一条消息:

  • C alice-bob = E a(P bob,M alice-bob)

Bob知道(来自外部证据)消息是用P bob加密的,所以他知道他必须用S bob解密它:

  • M alice-bob = D a(S bob,C alice-bob)

然而,在这一点上,他所知道的信息是它来自知道他的P bob键的人.除了通过外在证据,他不知道它来自爱丽丝.

如果Bob和Alice同意他们的消息必须加密,以便他们都确信收到的消息来自另一方,那么两者都必须确信除了Alice之外没有人知道S alice并且除了Bob之外没有其他人知道S bob.他们还必须确信鲍勃知道P alice,Bob必须确信P alice确实属于Alice,并且Alice知道P bob并且Alice必须确信P bob确实属于Bob.建立这些信任关系是PKI(公钥基础设施)的关键所在.

假设满足这些标准,那么Alice可以以这样的方式将她的消息发送给Bob,以便Bob确信只有Alice可以发送它.如前所述,该机制是双重加密:

  • C1 alice-bob = E a(S alice,M alice-bob)
  • C2 alice-bob = E a(P bob,C1 alice-bob)

Alice将Bob alice-bob发送给Bob(连同一些签名或MAC以确认它在传输过程中没有损坏),然后Bob计算:

  • D1 alice-bob = D a(S bob,C2 alice-bob)
  • D2 alice-bob = D a(P alice,D1 alice-bob)

如果一切按计划进行,D2 alice-bob = M alice-bob.

RSA密钥对的力学

RSA加密算法基于以下事实:如果你有两个公知数字(它是一个公钥的两部分),指数e和模数n,那么给定一个消息m,很容易计算c = m e mod n.然而,在给定c(和en)的情况下推导m是计算上不可行的.但是,如果您知道另一个指数d,则可以神奇地计算r = c d mod n,如果已经适当地计算了e,dn,则r = m.在不知道其他信息的情况下从en计算d是不可行的.

在RSA加密方案下,您开始使用两个(大)随机确定的素数pq,它们的乘积为n.RSA算法的前提是这样的事实:它是非常困难的因素Ñ(确定pq给出只是Ñ); 如果有人找到一种简单的方法来分解大数,那么RSA算法会立即被破坏.

一旦你有了n,你需要确定指数ed,这样:

  • ed = 1 mod t其中t = LCM(p-1,q-1),并且LCM是最小公倍数.

您可以选择两个值中的一个作为一个小的奇数 - 例如,Schneier和Ferguson建议e = 3.然后,您可以使用他们在书籍的大约6页中涵盖的一些计算来计算d.通常,d将是一个相当大的数字.然后,您可以将对(e,n)发布为组合公钥,将值(p,q,t,d)保密为私钥.给定en,在没有首先分解n的情况下推导d在计算上是不可行的."实用密码学"建议使用两个不同的对(e 1,d 1)和(e 2,d 2),从相同的值n导出,其中使用e 1加密消息,e 2用于数字签名; 他们甚至建议使用值3和5.


OpenSSL和密钥生成

我相信你对OpenSSL如何生成RSA密钥的描述很困惑.

生成过程首先必须在上面的符号中生成大的随机素数pq.有一些随机方法可以确定给定的大数是否(可能)为素数; 计算两个这样的素数需要一点时间.总之,这些用于计算第一个n,然后是d(假设e是通过某种约定建立的).您在OpenSSL中看到的两个阶段是确定n,然后确定d.


用户案例的解剖

问题是:

考虑到Alice想以非传统的方式向Bob发送一些东西:

爱丽丝和鲍勃见过面,爱丽丝给了鲍勃一张她创建的私钥生成的"公钥",但她警告鲍勃要保守秘密.她一直保密私钥,并没有把公钥给别人.

到现在为止还挺好."公钥"不是很公开,但这并没有什么害处.

Bob可以确定他从Alice收到的消息(如果这些消息是由Alice私钥加密的)只能由他读取(假设他真的保留了他的Alice公钥密钥的副本)吗?

如果加密技术有用,那么是; 只有Alice和Bob可以读取Alice用她的密钥加密的消息,因为只有Alice和Bob知道与她的秘密密钥一起使用的公钥.

而如何比较这种加密坚固的传统方式,这将在我们的情况下,被鲍勃发送消息给Alice(由Alice的公钥加密的)?

困惑:该部分开始讨论Alice向Bob发送消息; 现在你已经切换到Bob向Alice发送消息.

当Alice和Bob见面,爱丽丝给鲍勃她的P 爱丽丝的公钥.据推测,Bob还给了Alice他的P bob公钥.两个公钥都有非常有限的公共发行 - 这很好,但对系统的安全性并不重要.

现在,当Bob想要向Alice发送消息时,他可以使用她的P alice公钥对其进行加密,并且Alice(并且只有Alice)可以使用她的S alice密钥对消息进行解密.或者,Bob可以使用他的S bob密钥加密消息,Alice可以使用Bob的P bob公钥对其进行解密.两组加密和解密都可以使用.

问题是什么

非对称密钥被命名为"私有"和"公共"的事实无助于理解我的问题.密钥具有基础属性,它是我广播"公钥",赋予它"公共"属性.请在回答之前明确区分:我不考虑这些密钥的"公共"和"私有"属性,而是"私钥"加密与"公钥"加密的可靠性.

使用正确的私钥进行加密并使用正确的公钥进行解密同样可靠,因为它使用正确的公钥进行加密并使用正确的私钥进行解密.不同之处在于谁可以做哪种操作.如果您清楚地了解谁在进行加密以及谁在进行解密,以及谁知道哪些密钥,那么方法的保密性就会变得相当清楚.

即使在这种特殊情况下它具有误导性,我也不能使用其他术语.

那么,你的案例中的"公钥"并不是众所周知的,但这就是它的不寻常之处.

我知道这种情况是非传统的,并且可能导致一些不一致,或者不是非对称加密系统的问题,因为Bob和Alice在这里分享某种共同的秘密,而这不是不对称加密的重点.

非对称加密方案的重点在于攻击者(通常称为Eve,窃听者)是否知道公钥并不重要.只要私钥由Alice和Bob保密,就可以安全地发送消息.但是,您必须明白,如果Alice向Bob发送的消息仅由Alice的密钥加密,则知道Alice的公钥的任何人(例如Eve)都可以阅读该消息.除非她也知道秘密密钥,否则夏娃不能创建一个声称来自爱丽丝的假消息 - 如果夏娃发现了爱丽丝的秘密密钥,夏娃可以随时假装成爱丽丝.但她可以阅读.如果Alice向Bob发送仅由Bob的公钥加密的消息,那么只有Bob可以读取该消息(使用他的密钥),但Bob无法知道它是否真的来自Alice,或者Eve是否发送了它假装是爱丽丝.这就是为什么你必须努力确保Bob知道只有Alice可以发送消息,并且Alice知道只有Bob可以阅读该消息.


Ric*_*ard 6

仅仅因为当您加密某些内容时,您正在屏蔽它,以便只有一个人可以读取它(具有私钥的人).你没有那个人的私钥,你只拥有他们的公钥.

如果你与你的私人密钥加密的,任何人都可以用你的公钥解密 - 这是签约的原则 - 他们可以告诉大家,它是由你的私钥加密!