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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

RSA公钥体系 与在 ssh中免密的登陆的应用

發布時間:2024/7/5 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RSA公钥体系 与在 ssh中免密的登陆的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、秘鑰體系

????第一部分查看書籍為 北京大學出版社出版的 丘維聲老師的 數學思維方式與創新
????在之前安全協議的講解中,很多的協議都是用了秘鑰的這一概念,相信很多同學對這不求甚解,下面我來系統的介紹秘鑰體系,并且證明一下如今的公鑰私鑰RSA密碼系統。
秘鑰,即密鑰,在密碼學中,密鑰(key,又常稱金鑰)是指某個用來完成加密、解密、完整性驗證等密碼學應用的秘密信息。在對稱密碼學(或稱密鑰密碼學)中,加密和解密用的是同一個鑰匙,因此鑰匙需要保密。而在公鑰密碼學(或稱非對稱密碼學)中,加密和解密用的鑰匙不同:通常一個是公開的,稱為公鑰;另一個保密,稱為私鑰。

1.1 傳統加密

????傳統的加密方法是加密、解密使用同樣的密鑰,由發送者和接收者分別保存,在加密和解密時使用。但這帶來一個問題是密鑰的生成、注入、存儲、管理、分發等很復雜,特別是隨著用戶的增加,密鑰的需求量成倍增加。

1.2 RSA密碼系統(重點)

????1976年美國斯坦福大學的兩名學者迪菲和赫爾曼提出了公開密鑰密碼體制的概念。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。
????為了論述清楚計算上不可行的問題,我們給出一下定理:

1.3 歐拉函數

????在數論,對正整數n,歐拉函數是小于或等于n的正整數中與n互質的數的數目(因此φ(1)=1)。
下面我們給出歐拉函數的計算公式:
φ(n)=n(1?1p1)(1?1p2)…(1?1pk),n=p1α1p2α2?pnαn\varphi (n) =n(1-\frac{1}{p_1})(1-\frac{1}{p_2})\ldots(1-\frac{1}{p_k}), n=p_1^{{\alpha}_1}p_2^{{\alpha}_2}\cdots p_n^{{\alpha}_n}φ(n)=n(1?p1?1?)(1?p2?1?)(1?pk?1?),n=p1α1??p2α2???pnαn??
其中p1, p2……pn為x的所有質因數,x是不為0的整數
那么是如何證明的呢?下面我給出一個比較簡單的證明方法(容斥定理)

1.4 歐拉定理

????在數論中,歐拉定理,(也稱費馬-歐拉定理)是一個關于同余的性質。歐拉定理表明,若n,a為正整數,且n, a互質,則:

1.5 公鑰私鑰體系的引入

知道這兩個定理之后,讓我們聯想一下加密的過程:
發送方A需要向接收方B發送報文,首先在發送方 A 通過 a 的冪進行加密,將加密后的內容發送給B,然后 接收方B 通過 b 的冪進行還原。而且對于取模的冪運算可以通過快速冪算法在 log(a) 的復雜度下完成,過程如下圖7-2所示

下面我們給出一個公鑰私鑰的方案,查看他是否可行:
接收方 B,自己設計出 a, b, n,其中 a, b, n滿足的關系為ab≡kφ(n)+1ab\equiv k{\varphi}(n)+1abkφ(n)+1 ,接收方 B,將其中的 作為公鑰,公布在互聯網上,將 b 作為私鑰,內部保留,那么上述的過程就可以得以實現,即該算法是可行的。


????下面,我們來考慮一下,這種機制是否安全,當攻擊者 接收到 x ̄a\overline{x}^{a}xa,能否通過公布在互聯網上的公鑰 (a,n)(a, n)(a,n),計算出 bbb,進而解密,獲取發送方A的原內容 即 ?
????在公式 ab≡kφ(n)+1ab\equiv k{\varphi}(n)+1abkφ(n)+1中,已知 ,倘若攻擊者知道aaaφ(n)\varphi (n)φ(n) ,就可以使用擴展的歐幾里得算法,可以在 log(n)log(n)log(n)的復雜度內,找到未知數 b, k 的一組解決方案,完成密碼破解。

1.6 歐幾里得算法與擴展歐幾里得算法

????這里,我簡單介紹一下歐幾里得算法和擴展歐幾里得算法

歐幾里得算法

????首先,我們將a, b的最大公約數greatest common divisor,記作gcd(a, b)
????歐幾里得算法就是為了求出兩個數a、b的最大公約數,他利用gcd(a, b) == gcd(b, a%b),將問題不多進行遞歸求解,使用 c 語言書寫的代碼如下(本人手寫)

int gcd(int a, int b){if(b == 0) return a;else return gcd(b, a % b); }

擴展的歐幾里得算法

??是對于歐幾里得算法的擴展,在原本求解gcd(a, b)的基礎之上,求解 的問題。
對應的c++代碼如下,證明過程即為代碼的第一段注釋(本人手寫):

/* exgcd(a, b, x, y):a * x + b * y == gcd(a, b); exgcd(b, a % b, y, x):b * y + (a - a / b * b) * x == gcd (b, a % b)a * x + b * (y - a / b * x) == gcd (a, b)所以說可得遞歸通式:gcd(a, b, x, y):gcd(b, a % b, y, x)求結果y -= a / b * x; 遞歸終點:b == 0 時, a * x + 0 * y == ax = 1, y = 0*/ LL exgcd(LL a, LL b, LL &x, LL &y) {if (b == 0LL) {x = 1, y = 0;return a;} else {exgcd(b, a % b, y, x);y -= a / b * x;} }

1.7 公鑰私鑰的具體實現

????通過剛剛的擴展的歐幾里得算法,可以在破解者在已知 (a,φ(n))(a, \varphi (n))(a,φ(n))的前提下,可以在O(log(N)O(log(N)O(log(N) 的時間復雜度下求出 中的bbb, 破解出私鑰,但是知道破解者知道 nnn,就可以求出 φ(n)\varphi(n)φ(n)嗎?之前已經證明過歐拉函數的公式,如下所示:

??下面對 $\varphi (n) $的求解,轉移為了將 n 進行質數分解,分解成以下形式:

??那么,該分解的復雜度為多少了?復雜度為O(n)O(\sqrt {n})O(n?) ,當我們n很大時,比如 106010^{60}1060,此時普通計算機的求解就需要100年。
但是,攻擊者無法求解出 φn\varphi{n}φn,接收方B是如何求解 的呢?原來,接收方僅僅只需要選取兩個大的質數,p, q,然后讓 n=pqn=pqn=pq,因此可得 φ(n)=(p?1)(q?1)\varphi (n)=(p-1)(q-1)φ(n)=(p?1)(q?1),求解完畢。
????至此,公開密鑰密碼體制基本概念講解完畢!

二、ssh密鑰登錄原理與實現免密登陸

第二部分參考博客

公鑰和私鑰都屬于非對稱加密算法的一個實現,這個加密算法的信息交換過程是:(乙向甲請求遠程登錄)

  • 持有公鑰的一方(甲)在收到持有私鑰的一方(乙)的請求時,甲會在自己的公鑰列表中查找是否有乙的公鑰,如果有則使用一個隨機字串使用公鑰加密并發送給乙
  • 乙收到加密的字串使用自己的私鑰進行解密,并將解密后的字串發送給甲。
  • 甲接收到乙發送來的字串與自己的字串進行對比,如過通過則驗證通過,否則驗證失敗。
  • 也就是說,請求登陸他人計算機的 客戶機 需要有自己的公鑰和私鑰,并將自身公鑰發送給 被登錄機 (服務機)

    ????非對稱加密算法不能使用相同的密鑰進行解密,也就是說公鑰加密的只能使用私鑰進行解密。
    這一部分可以通過第一部分的證明得知 ab≡kφ(n)+1ab\equiv k\varphi (n) + 1abkφ(n)+1,僅僅使用 aaa,或者是 僅僅使用 bbb 是沒有這個等式關系的

    2.1 免密登陸過程

    ssh使用私鑰登錄大致步驟就是:主機A(客戶端)創建公鑰私鑰,并將公鑰復制到主機B(被登陸機)的指定用戶下,然后主機A使用保存私鑰的用戶登錄到主機B對應保存公鑰的用戶。

    (1) 實驗環境
    兩臺主機:

  • 主機A(客戶機):192.168.187.137
  • 主機B(被登陸機):192.168.187.142
  • (2) 實驗開始
    在需要免密登陸的主機(主機A)下生成公鑰和私鑰

    ssh-keygen -t rsa ##-t rsa可以省略,默認就是生成rsa類型的密鑰

    說明:命令執行后會有提示,輸入三次回車即可,執行完成后會在當前用戶的.ssh目錄下生成兩個文件:id_rsa、id_rsa.pub文件,前者時私鑰文件,后者是公鑰文件(拷貝到其他主機只需要拷貝這個文件的內容)

    將公鑰復制到被登陸的主機上的 ~/.ssh/authorized_keys 文件中
    拷貝公鑰有兩種方法,其原理都相同:


    方式一:使用 ssh-copy-id 直接拷貝
    使用 ssh-copy-id 進行拷貝公鑰非常方便,只需要指定目標主機和目標主機的用戶即可。

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.187.142

    執行這條命令后會自動將登錄主機的公鑰文件內容追加至目標主機中指定用戶(root).ssh目錄下的authorized_keys文件中。這個過程是全自動的,非常方便。


    方法二:自己創建文件進行拷貝

  • 在登錄主機(客戶機)上創建authorized_keys文件并將公鑰追加到該文件。
  • cat id_rsa.pub >> authorized_keys chmod 600 authorized_keys ##修改文件權限為600,該文件有規定如果屬組其他人出現可寫則文件就不會生效
  • 在被登錄機的指定用戶家目錄下創建 .ssh 目錄(這里在root用戶下創建,因為要使用密鑰登陸到root用戶),你也可以使 hadoop 用戶
  • mkdir .ssh chmod 700 .ssh ##將目錄權限改為700該目錄的權限必須是700才有效
  • 將登錄機創建的authorized_keys文件拷貝到被登錄機,使用scp
  • scp authorized_keys root@192.168.187.142:/root/.ssh/ authorized_keys 100% 402 576.4KB/s 00:00

    2.2 免密登陸

    登錄
    使用主機A乙root用戶身份登陸到主機B

    ssh root@192.168.187.142 Last login: Wed Feb 13 15:24:30 2019 from 192.168.187.137

    ????首次登錄將彈出保存信息,輸入yes即可,此時已經實現了免密的密鑰登陸。
    注意事項和說明
    ????上例只能實現主機A免密登陸到主機B的root用戶,如果想讓主機B也免密登錄到主機A,創建密鑰和拷貝步驟相同。
    ????密鑰登陸的方式只能登錄被登錄機中 .ssh 目錄下有對應公鑰的用戶,如果想讓所有用戶都可以被登錄則需要將authorized_keys文件的內容追加到其他用戶的 ~/.ssh/authorized_keys 文件中。
    ????如果使用自己創建的authorized_keys文件進行復制公鑰則要嚴格設置權限,權限不正確會導致文件無法使用,也就無法進行密鑰驗證。

    再次說明,第二部分參考至博客園的一個博客

    總結

    以上是生活随笔為你收集整理的RSA公钥体系 与在 ssh中免密的登陆的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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