日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Https中公私钥加密算法和其使用的RSA算法分析

發布時間:2023/12/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Https中公私钥加密算法和其使用的RSA算法分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習Https原理的過程中,對公鑰證書和私鑰證書交換的過程、公鑰算法、公鑰證書、RSA算法進行了的學習。下面主要是對公鑰加密和RSA算法的分析。分析過程并沒有覆蓋https的方方面面,只是自己的一個筆記,希望在公私鑰加密中使用的RSA算法方面,能對大家有所幫助。

Public Key Encryption(公鑰加密)

公鑰加密有兩種用途:

Public key encryptography accomplishes two functions:

  • authentication which is when the public key is used to verify that a holder of the paired private key sent the message.
    認證過程https中APP客戶端通過公鑰證書中的publicKey驗證服務器是否是希望訪問的服務器。
  • encryption whereby only the holder of the paired private key can decrypt the message encrypted with the public key.
  • 公鑰加密和數字簽名的區別

    公鑰加密(public key encryption) 和 數字簽名(digital signatures)不是一回事,他們是兩種不同的公鑰加密算法(public key encryptography)。

  • 公鑰加密(public key encryption)
    • 作用:
      • 加密 key pair的所有者(sender,S)將public key發送給使用者(recipient,R),R使用public key加密需要傳送給S的消息,然后發送給S。這個消息因為使用了public key進行了加密,任何人都不可能解密消息,除了private key的所有者S。這就保證了消息的安全性。
    • 缺陷:
      public key encryption本身并不能完成以下事項:
      • 不能保證使用者拿到的是真正sender的public key,有可能拿到的是MITM攻擊者的public key。
      • public key并不用來對sender發出的消息進行任何處理,所以public key與sender所發出消息的安全性沒有關系,即不能通過public key保證發送給R的消息不被破解
      • public key僅用來加密R發送回S的消息,保證發送回的消息是不能被破解的。
      • public key和消息是一起發送給對方的,無法保證public key和消息是原配,中間過程中兩個東西有可能其中一個被篡改了。 綜上所述,如何保證給到使用者的public key是真的,以及所有者發送給使用者的消息不被破解,需要額外的加密方法。
  • 數字簽名(digital signatures)
    a message is signed with the sender's private key and can be verified by anyone who has access to the sender's public key. This verification proves that the sender had access to the private key, and therefore is likely to be the person associated with the public key.
    • 解決的主要問題是驗證消息是否被改動。
    • 間接解決了public key encryption不能保證public key和消息是原配的問題
    • 數字簽名可以保證消息沒有被改動過,任何改動均會造成簽名失效。S發送的消息經過private key數字簽名后,用public key可以驗證簽名的有效性,如果簽名有效,即保證消息是由private key的所有者發出的。
    • 數字簽名的根本是將消息和key關聯起來。
  • RSA算法

    Key Generation

  • RSA的基礎: 如果兩個正整數a和n互質,則n的歐拉函數 φ(n) 可以讓下面的等式成立:

    歐拉函數 φ(n)定義: 任意給定正整數n,請問在小于等于n的正整數之中,有多少個與n構成互質關系?計算這個結果的函數就叫歐拉函數.

  • RSA算法的關鍵:φ(n)的值,如果φ(n)計算出來了,就破解了。

  • n的選擇

    • 為什么n的取值為兩個質數的乘積,而不是直接隨機選取一個大整數?
      因為作為私鑰的d是通過求取n的歐拉函數得到的,所以有以下幾點不能直接選取n,而采取n=p*q的方式得到。

      直接獲取n,如果n是質數,那么n的歐拉函數就等于 φ(n)=n-1,那么私鑰d直接就被破解了,所以n絕對不能是一個質數。如果直接選取一個極大的正整數作為n,那就要保證n不能是質數。

      但是直接選取n還有一個更大的問題,私鑰的d無法通過計算得到。因為對于破解者因數分解是極其困難的,同樣對于生成秘鑰的人也是極其困難的。

      所以就需要一種方式,讓破解者計算n的歐拉函數(即對n進行因式分解)極其困難,而秘鑰生成者極容易計算。

      綜上所述,產生了目前n的計算方式 n=p*q;p和q是兩個極大的質數。因為φ(n)=(p-1)(q-1),所以秘鑰生成者很容易計算出n的歐拉函數。而破解者因為不知道p和q的數值,所以必須暴力進行因數分解,從而使得破解極其困難。

  • e和(n)為什么要互質?
    根據歐拉定理,a和n必須互質,在RSA中,a=e,n=φ(n),所以這兩個數值必須是互質的。

  • e為什么要小于(n)?
    未知。

  • 為什么選取φ(n)作為歐拉定理中的n?
    如果RSA中,不使用e和φ(n)作為互質的兩個元素,而使用e和n作為互質的兩個元素。那么在公布公鑰(e,n)之后,d極容易被破解。

    因為歐拉定理

    可以表示為

    通過上面的等式可以發現,d有兩種計算方式:

    第一種:
    通過如下公式:

    計算d,因為φ(n)極難計算,所以d不會被破解.

    第二種:
    可以通過擴展歐幾里得算法求二元一次方程e·d-1=kn,e和n已知。這種方式因為e和n均為已知量,所以很容易求得d。

    綜上所述,如果直接用n作為歐拉定理中的n,那么因為公鑰提供了e和n的值,私鑰的極容易通過上面的第二種方法計算得到,從而被破解。所以不能直接使用n作為互質數值中的一個,而應該采用φ(n)和e配對。采用φ(n)的情況下,第二種方式就無法計算出d的值,從而保證d在任何情況下都極不容易被破解。

  • Encryption and Decryption

  • 加密的公式
  • 解密的公式
  • 加密和解密的公式為什么是上面兩個?
    因為根據歐拉定理得到的三個數值n,d,e,可以使上面兩個公式同時成立,并能夠保證d的不可破解性。
  • 為什么私鑰選擇(d,n),而公鑰選擇(e,n) ?
    因為上面的兩個公式中的n,d,e,必須是由key generation中的方式得到時,兩個公司才成立。所以根據公式,n,d,e被分為了兩組(e,n)和(d,n)。那為什么選擇(e,n)為公鑰呢?顯而易見,d是破解這種加密方式的關鍵,所以d一定是需要保存在安全位置的數值,那(d,n)就不可能作為公鑰,而只能作為私鑰。
  • 加密和解密公式的證明,請搜索阮一峰的博客,里面有具體的證明過程。
  • 最后來個項目自薦

    • 一個為Android系統源碼,JDK源碼,OkHttp源碼等,進行注釋的項目,主要是對源碼的一種學習:github.com/kishimotoin… ,做過注釋的類在commit里可以看到。覺得好可以給顆星,多謝啦!

    總結

    以上是生活随笔為你收集整理的Https中公私钥加密算法和其使用的RSA算法分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。