日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
國王的秘密:如何保護(hù)你的主密碼

很多人使用密碼管理器來保密存儲(chǔ)自己在用的各種密碼。密碼管理器的關(guān)鍵環(huán)節(jié)之一是主密碼,主密碼保護(hù)著所有其它密碼。這種情況下,主密碼本身就是風(fēng)險(xiǎn)所在。任何知道你的主密碼的人,都可以視你的密碼保護(hù)若無物,暢行無阻。自然而然,為了保證主密碼的安全性,你會(huì)選用很難想到的密碼,把它牢記在腦子里,并做所有其他你應(yīng)該做的事情。

創(chuàng)新互聯(lián)建站主要從事做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)平南,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

但是萬一主密碼泄露了或者忘記了,后果是什么?也許你去了個(gè)心儀的島上旅行上個(gè)把月,沒有現(xiàn)代技術(shù)覆蓋,在開心戲水之后享用美味菠蘿的時(shí)刻,突然記不清自己的密碼是什么了。是“山巔一寺一壺酒”?還是“一去二三里,煙村四五家”?反正當(dāng)時(shí)選密碼的時(shí)候感覺渾身都是機(jī)靈,現(xiàn)在則后悔當(dāng)初何必作繭自縛。

當(dāng)然,你不會(huì)把自己的主密碼告訴其它任何人,因?yàn)檫@是密碼管理的首要原則。有沒有其它變通的辦法,免除這種難以承受的密碼之重?

試試 Shamir 秘密共享算法(Shamir's Secret Sharing),這是一種可以將保密內(nèi)容進(jìn)行分塊保存,且只能將片段拼合才能恢復(fù)保密內(nèi)容的算法。

先分別通過一個(gè)古代的和一個(gè)現(xiàn)代的故事,看看 Shamir 秘密共享算法究竟是怎么回事吧。

這些故事的隱含前提是你對(duì)密碼學(xué)有起碼的了解,必要的話,你可以先溫習(xí)一下 密碼學(xué)與公鑰基礎(chǔ)設(shè)施引論。

一個(gè)古代關(guān)于加解密的故事

古代某國,國王有個(gè)大秘密,很大很大的秘密:

 
 
 
 
  1. def int_from_bytes(s): 
  2.     acc = 0 
  3.     for b in s: 
  4.         accacc = acc * 256 
  5.         acc += b 
  6.     return acc 
  7. secret = int_from_bytes("terrible secret".encode("utf-8")) 

大到連他自己的孩子都不能輕易信任。他有五個(gè)子女,但他知道前路危機(jī)重重。他的孩子需要在他百年之后用這個(gè)秘密來保衛(wèi)國家,而國王又不能忍受自己的孩子在他們還記得自己的時(shí)候就知道這些秘密,尤其是這種狀態(tài)可能要持續(xù)幾十年。

所以,國王動(dòng)用大力魔術(shù),將這個(gè)秘密分為了五個(gè)部分。他知道,可能有一兩個(gè)孩子不會(huì)遵從他的遺囑,但絕對(duì)不會(huì)同時(shí)有三個(gè)或三個(gè)以上會(huì)這樣:

 
 
 
 
  1. from mod import Mod 
  2. from os import urandom 

國王精通 有限域 和 隨機(jī) 魔法,當(dāng)然,對(duì)他來說,使用巨蟒分割這個(gè)秘密也是小菜一碟。

第一步是選擇一個(gè)大質(zhì)數(shù)——第 13 個(gè) 梅森質(zhì)數(shù)(2**521 - 1),他讓人把這個(gè)數(shù)鑄造在巨鼎上,擺放在大殿上:

 
 
 
 
  1. P = 2**521 - 1 

但這不是要保密的秘密:這只是 公開數(shù)據(jù)。

國王知道,如果 P 是一個(gè)質(zhì)數(shù),用 P 對(duì)數(shù)字取模,就形成了一個(gè)數(shù)學(xué) 場(chǎng):在場(chǎng)中可以自由進(jìn)行加、減、乘、除運(yùn)算。當(dāng)然,做除法運(yùn)算時(shí),除數(shù)不能為 0。

國王日理萬機(jī),方便起見,他在做模運(yùn)算時(shí)使用了 PyPI 中的 mod 模塊,這個(gè)模塊實(shí)現(xiàn)了各種模數(shù)運(yùn)算算法。

他確認(rèn)過,自己的秘密比 P 要短:

 
 
 
 
  1. secret < P 
 
 
 
 
  1. TRUE 

將秘密轉(zhuǎn)換為 P 的模,mod P:

 
 
 
 
  1. secret = mod.Mod(secret, P) 

為了使任意三個(gè)孩子掌握的片段就可以重建這個(gè)秘密,他還得生成另外兩個(gè)部分,并混雜到一起:

 
 
 
 
  1. polynomial = [secret] 
  2. for i in range(2): 
  3.     polynomial.append(Mod(int_from_bytes(urandom(16)), P)) 
  4. len(polynomial) 
 
 
 
 

下一步就是在隨機(jī)選擇的點(diǎn)上計(jì)算某 多項(xiàng)式 的值,即計(jì)算 polynomial[0] + polynomial[1]*x + polynomial[2]*x**2 ...。

雖然有第三方模塊可以計(jì)算多項(xiàng)式的值,但那并不是針對(duì)有限域內(nèi)的運(yùn)算的,所以,國王還得親自操刀,寫出計(jì)算多項(xiàng)式的代碼:

 
 
 
 
  1. def evaluate(coefficients, x): 
  2.     acc = 0 
  3.     power = 1 
  4.     for c in coefficients: 
  5.         acc += c * power 
  6.         power *= x 
  7.     return acc 

再下一步,國王選擇五個(gè)不同的點(diǎn),計(jì)算多項(xiàng)式的值,并分別交給五個(gè)孩子,讓他們各自保存一份:

 
 
 
 
  1. shards = {} 
  2. for i in range(5): 
  3.     x = Mod(int_from_bytes(urandom(16)), P) 
  4.     y = evaluate(polynomial, x) 
  5.     shards[i] = (x, y) 

正如國王所慮,不是每個(gè)孩子都正直守信。其中有兩個(gè)孩子,在他尸骨未寒的時(shí)候,就想從自己掌握的秘密片段中窺出些什么,但窮極所能,終無所獲。另外三個(gè)孩子聽說了這個(gè)事,合力將這兩人永遠(yuǎn)驅(qū)逐:

 
 
 
 
  1. del shards[2] 
  2. del shards[3] 

二十年彈指一揮間,奉先王遺命,三個(gè)孩子將合力恢復(fù)出先王的大秘密。他們將各自的秘密片段拼合在一起:

 
 
 
 
  1. retrieved = list(shards.values()) 

然后是 40 天沒日沒夜的苦干。這是個(gè)大工程,他們雖然都懂些 Python,但都不如前國王精通。

最終,揭示秘密的時(shí)刻到了。

用于反算秘密的代碼基于 拉格朗日差值,它利用多項(xiàng)式在 n 個(gè)非 0 位置的值,來計(jì)算其在 0 處的值。前面的 n 指的是多項(xiàng)式的階數(shù)。這個(gè)過程的原理是,可以為一個(gè)多項(xiàng)式找到一個(gè)顯示方程,使其滿足:其在 t[0] 處的值是 1,在 i 不為 0 的時(shí)候,其在 t[i] 處的值是 0。因多項(xiàng)式值的計(jì)算屬于線性運(yùn)算,需要計(jì)算 這些 多項(xiàng)式各自的值,并使用多項(xiàng)式的值進(jìn)行插值:

 
 
 
 
  1. from functools import reduce 
  2. from operator import mul 
  3. def retrieve_original(secrets): 
  4.     x_s = [s[0] for s in secrets] 
  5.     acc = Mod(0, P) 
  6.     for i in range(len(secrets)): 
  7.         others = list(x_s) 
  8.         cur = others.pop(i) 
  9.         factor = Mod(1, P) 
  10.         for el in others: 
  11.             factor *= el * (el - cur).inverse() 
  12.         acc += factor * secrets[i][1] 
  13.     return acc 

這代碼是在太復(fù)雜了,40 天能算出結(jié)果已經(jīng)夠快了。雪上加霜的是,他們只能利用五個(gè)秘密片段中的三個(gè)來完成這個(gè)運(yùn)算,這讓他們?nèi)f分緊張:

 
 
 
 
  1. retrieved_secret = retrieve_original(retrieved) 

后事如何?

 
 
 
 
  1. retrieved_secret == secret 
 
 
 
 
  1. TRUE 

數(shù)學(xué)這個(gè)魔術(shù)的優(yōu)美之處就在于它每一次都是那么靠譜,無一例外。國王的孩子們,曾經(jīng)的孩童,而今已是壯年,足以理解先王的初衷,并以先王的錦囊妙計(jì)保衛(wèi)了國家,并繼之以繁榮昌盛!

關(guān)于 Shamir 秘密共享算法的現(xiàn)代故事

現(xiàn)代,很多人都對(duì)類似的大秘密苦不堪言:密碼管理器的主密碼!幾乎沒有誰能有足夠信任的人去完全托付自己最深的秘密,好消息是,找到至少有三個(gè)不會(huì)串通起來搞鬼的五人組不是個(gè)太困難的事。

同樣是在現(xiàn)代,比較幸運(yùn)的是,我們不必再像國王那樣自己動(dòng)手分割要守護(hù)的秘密。拜現(xiàn)代 開源 技術(shù)所賜,這都可以使用現(xiàn)成的軟件完成。

假設(shè)你有五個(gè)不敢完全信任,但還可以有點(diǎn)信任的人:張三、李四、王五、趙六和錢大麻子。

安裝并運(yùn)行 ssss 分割密鑰:

 
 
 
 
  1. $ echo 'long legs travel fast' | ssss-split -t 3 -n 5 
  2. Generating shares using a (3,5) scheme with dynamic security level. 
  3. Enter the secret, at most 128 ASCII characters: Using a 168 bit security level. 
  4. 1-797842b76d80771f04972feb31c66f3927e7183609 
  5. 2-947925f2fbc23dc9bca950ef613da7a4e42dc1c296 
  6. 3-14647bdfc4e6596e0dbb0aa6ab839b195c9d15906d 
  7. 4-97c77a805cd3d3a30bff7841f3158ea841cd41a611 
  8. 5-17da24ad63f7b704baed220839abb215f97d95f4f8 

這確實(shí)是個(gè)非常牛的主密碼:long legs travel fast,絕不能把它完整的托付給任何人!那就把五個(gè)片段分別交給還比較可靠的伙伴,張三、李四、王五、趙六和錢大麻子。

  • 把 1 給張三。
  • 把 2 給李四。
  • 把 3 給王五。
  • 把 4 給趙六。
  • 把 5 給錢大麻子。

然后,你開啟你的愜意之旅,整整一個(gè)月,流連于海邊溫暖的沙灘,整整一個(gè)月,沒碰過任何電子設(shè)備。沒用多久,把自己的主密碼忘到了九霄云外。

李四和王五也在和你一起旅行,你托付給他們保管的密鑰片段保存的好好的,在他們各自的密碼管理器中,但不幸的是,他們和你一樣,也忘了自己的 主密碼。

沒關(guān)系。

聯(lián)系張三,他保管的密鑰片段是 1-797842b76d80771f04972feb31c66f3927e7183609;趙六,一直替你的班,很高興你能盡快重返崗位,把自己掌握的片段給了你,4-97c77a805cd3d3a30bff7841f3158ea841cd41a611;錢大麻子,收到你給的跑腿費(fèi)才將自己保管的片段翻出來發(fā)給你,5-17da24ad63f7b704baed220839abb215f97d95f4f8。

有了這三個(gè)密鑰片段,運(yùn)行:

 
 
 
 
  1. $ ssss-combine -t 3 
  2. Enter 3 shares separated by newlines: 
  3. Share [1/3]: 1-797842b76d80771f04972feb31c66f3927e7183609 
  4. Share [2/3]: 4-97c77a805cd3d3a30bff7841f3158ea841cd41a611 
  5. Share [3/3]: 5-17da24ad63f7b704baed220839abb215f97d95f4f8 
  6. Resulting secret: long legs travel fast 

就這么簡(jiǎn)單,有了 開源 技術(shù)加持,你也可以活的像國王一樣滋潤(rùn)!

自己的安全不是自己一個(gè)人的事

密碼管理是當(dāng)今網(wǎng)絡(luò)生活必備技能,當(dāng)然要選擇復(fù)雜的密碼,來保證安全性,但這不是全部。來用 Shamir 秘密共享算法,和他人共同安全的存儲(chǔ)你的密碼吧。


本文題目:國王的秘密:如何保護(hù)你的主密碼
當(dāng)前鏈接:http://www.dlmjj.cn/article/dpgjgdo.html