SSH公鑰私鑰認證原理
通常,透過ssh登入遠端伺服器時,使用密碼認證,分別輸入使用者名稱和密碼,兩者滿足一定規則就可以登入。但是密碼認證有以下的缺點:
- 使用者無法設定空密碼(即使系統允許空密碼,也會十分危險)
- 密碼容易被人偷窺或猜到
- 伺服器上的一個帳戶若要給多人使用,則必須讓所有使用者都知道密碼,導致密碼容易洩露,而且修改密碼時必須通知所有人
而使用公鑰認證則可以解決上述問題。
- 公鑰認證允許使用空密碼,省去每次登入都需要輸入密碼的麻煩
- 多個使用者可以透過各自的金鑰登入到系統上的同一個使用者
公鑰認證的原理
所謂的公鑰認證,實際上是使用一對加密字串,一個稱為公鑰(public key),任何人都可以看到其內容,用於加密;另一個稱為金鑰(private key),只有擁有者才能看到,用於解密。透過公鑰加密過的密文使用金鑰可以輕鬆解密,但根據公鑰來猜測金鑰卻十分困難。
ssh 的公鑰認證就是使用了這一特性。伺服器和客戶端都各自擁有自己的公鑰和金鑰。為了說明方便,以下將使用這些符號。
Ac |
|
客戶端公鑰 |
Bc |
|
客戶端金鑰 |
As |
|
伺服器公鑰 |
Bs |
|
伺服器金鑰 |
在認證之前,客戶端需要透過某種方法將公鑰 Ac 登入到伺服器上。
認證過程分為兩個步驟。
1、會話金鑰(session key)生成
1)客戶端請求連線伺服器,伺服器將 As 傳送給客戶端。
2)伺服器生成會話ID(session id),設為 p,傳送給客戶端。
3)客戶端生成會話金鑰(session key),設為 q,並計算 r = p xor q。
4)客戶端將 r 用 As 進行加密,結果傳送給伺服器。
5)伺服器用 Bs 進行解密,獲得 r。
6)伺服器進行 r xor p 的運算,獲得 q。
7)至此伺服器和客戶端都知道了會話金鑰q,以後的傳輸都將被 q 加密。
2、認證
1)伺服器生成隨機數 x,並用 Ac 加密後生成結果 S(x),傳送給客戶端
2)客戶端使用 Bc 解密 S(x) 得到 x
3)客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話金鑰
4)伺服器計算 q + x 的 md5 值 m(q+x)
5)客戶端將 n(q+x) 傳送給伺服器
6)伺服器比較 m(q+x) 和 n(q+x),兩者相同則認證成功
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26812308/viewspace-2085445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SSH 公鑰私鑰的生成管理
- 完成ssh無密碼的驗證,採用公鑰、私鑰密碼
- 公鑰私鑰
- 公鑰和私鑰
- SSH-keygen rsa 金鑰對根據私鑰生成公鑰
- 金鑰,私鑰,公鑰的區分
- openSSL生成公鑰和私鑰
- 私鑰與公鑰有何不同?
- 01_私鑰、公鑰和地址
- php中的公鑰和私鑰PHP
- php使用openssl生成公鑰私鑰PHP
- TLS、SSL、CA 證書、公鑰、私鑰。。。今天捋一捋!TLS
- OpenSSL 公鑰私鑰加解密封裝解密封裝
- 使用openssl生成rsa公鑰和私鑰
- [SSL]公鑰與私鑰典型應用
- 蘋果ios簽名的公鑰與私鑰蘋果iOS
- Mac 使用openssl生成RSA公鑰和私鑰Mac
- 【韭菜幣讀】用Emoji科普公鑰與私鑰的基本原理
- SSH私鑰管理ssh-agent的使用
- 【加密演算法】PFX檔案提取公鑰私鑰加密演算法
- 支付介面教程——公鑰與私鑰,雙鑰加密和數字簽名加密
- MAC OSX 下 使用openssl 命令 生成RSA公鑰和私鑰Mac
- 公鑰加密、數字簽名、訊息認證加密
- 私鑰和公鑰到底是誰來加密、誰來解密?加密解密
- 公鑰私鑰gitee都不行,新手小白破局(windows憑據)GiteeWindows
- ssh公鑰免密碼登入密碼
- 使用公鑰和私鑰實現LINUX下免密登入Linux
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- SSH安全登陸原理:密碼登陸與公鑰登陸密碼
- 【備忘錄】配置ssh公鑰登入
- 如何在 Linux 中配置基於金鑰認證的 SSHLinux
- 使用公鑰/私鑰對設定免密的 Linux 登入方式Linux
- 公鑰基礎設施和密碼學中的私鑰的角色密碼學
- Mac OS上執行openssl命令操作,生成RSA私鑰和RSA公鑰Mac
- java中的使用RSA演算法進行公鑰加密私鑰解密 .Java演算法加密解密
- C# Rsa加密(私鑰加密、公鑰解密、金鑰格式轉換、支援超大長度分段加密)C#加密解密
- 如何保護SSL證書私鑰安全
- Ubuntu SSH 使用指定私鑰登陸伺服器Ubuntu伺服器