真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

用go語言編寫非對稱密碼 用go語言編寫非對稱密碼是什么

6 Go 密碼學(xué)(三)對稱加密 DES、TDES、AES

我們在開發(fā)中常會遇到這種需求:通信的兩端需要傳輸安全級別較高的數(shù)據(jù),這需要我們傳輸?shù)募用軘?shù)據(jù)既要難以破解,又要可逆的解密過程。哈希算法雖難以破解,但并非適用于通信中的加解密傳輸。這就需要基于秘鑰管理的加密技術(shù)了。對稱加密是最簡單快速的加密方式,所謂對稱加密,即加解密雙方都掌握相同的秘鑰,通過同一秘鑰完成加解密操作。常用的對稱加密算法有:

創(chuàng)新互聯(lián)是專業(yè)的屯溪網(wǎng)站建設(shè)公司,屯溪接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行屯溪網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

Go標(biāo)準(zhǔn)庫中的加密相關(guān)包都有相應(yīng)的支持,下面我們來逐一演示:

所以要實現(xiàn)DES加密需要準(zhǔn)備如下要求:

以上,秘鑰和初始化向量值需要自己管理,末尾分組的填充算法和刪除算法需要自己實現(xiàn)。下面我們實現(xiàn)一個填充算法和刪除算法:

以上實現(xiàn)思路為:計算出最后一個分組需要填充的字節(jié)數(shù)(1-8),并把這個數(shù)作為需要填充的占位符,再把填充后的分組與源數(shù)據(jù)拼接就得到待加密的字符串。

Go通過crypto/des包支持DES加密算法:

使用以上加解密方法:

以上就是Go 中DES的加解密實現(xiàn),可見其加密的安全性依賴于秘鑰的管理,而且其只有64Bit的秘鑰長度在算力越來越高的現(xiàn)在已經(jīng)不夠安全了,這也是對稱加密的弱點,在實際的網(wǎng)絡(luò)項目中,秘鑰的分發(fā)需要依賴其他方式的配合。

對于DES秘鑰較弱的問題做了一些改進(jìn),這就是三重DES加密算法,其原理與DES類似,唯一不同的是秘鑰從一組八字節(jié)變成三組二十四字節(jié)(192Bit)。其加密強(qiáng)度也和秘鑰設(shè)置相關(guān),此處演示我們也用CBC分組模式,三重加密執(zhí)行順序分別為,加密-解密-加密。

為了兼容DES,只有當(dāng)秘鑰一組和秘鑰二組相同時,3DES其加密安全性和DES相同,其余秘鑰的分組設(shè)置都是三重DES加密。

使用以上加解密方法:

隨著時代的發(fā)展,DES和3DES于現(xiàn)今的算力和性能要求來說已經(jīng)逐漸落伍,為了適應(yīng)更高的安全性和性能需要,業(yè)界采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。這就是AES對稱加密算法,在現(xiàn)今的項目開發(fā)中,建議使用這種加密方式。

AES的基本要求是,采用對稱分組密碼體制,密鑰的長度最少支持為128、192、256,分組長度128位。

所以要實現(xiàn)AES加密需要準(zhǔn)備如下要求:

Go通過crypto/aes包支持DES加密算法:

以上,其用法和DES差不多,只不過秘鑰管理稍微不同而已。

非對稱加密之ECC橢圓曲線(go語言實踐)

橢圓曲線密碼學(xué)(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的算法,基于橢圓曲線數(shù)學(xué)。橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。

ECC的主要優(yōu)勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密算法——提供相當(dāng)?shù)幕蚋叩燃壍陌踩?/p>

橢圓曲線密碼學(xué)的許多形式有稍微的不同,所有的都依賴于被廣泛承認(rèn)的解決橢圓曲線離散對數(shù)問題的 困難性上。與傳統(tǒng)的基于大質(zhì)數(shù)因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質(zhì)產(chǎn)生密鑰。

ECC 164位的密鑰產(chǎn)生的一個安全級相當(dāng)于RSA 1024位密鑰提供的保密強(qiáng)度,而且計算量較小,處理速度 更快,存儲空間和傳輸帶寬占用較少。目前我國 居民二代身份證 正在使用 256 位的橢圓曲線密碼,虛擬 貨幣 比特幣 也選擇ECC作為加密算法。

具體算法詳解參考:

Go 實現(xiàn) TLS 通信 (1, TLS簡介)

本系列文章包含以下內(nèi)容

本系列文章中大寫 C 統(tǒng)一表示客戶端,大寫 S 表示服務(wù)器端。

定義摘自維基百科。

完整性保障很容易理解, C (客戶端)與 S (服務(wù)器端)通信,客戶端發(fā)出信息[ 轉(zhuǎn)10000給張三 ],經(jīng)過網(wǎng)絡(luò)傳輸后,由于網(wǎng)絡(luò)丟包變成了[ 轉(zhuǎn)100塊給張三 ],客戶端估計會被張三揍哭。因此服務(wù)端(收到信息的一方)需要保證收到的信息確實一絲一毫都沒變。這就是完整性。

保證完整性通常通過哈希值來實現(xiàn)。比如我們可以設(shè)計一種弱雞的算法,計算字?jǐn)?shù)的個數(shù)作為哈希,那么信息變成了[ 轉(zhuǎn)10000塊給張三,10 ],其中10就是哈希值,那么如果服務(wù)端收到的信息是[ 轉(zhuǎn)100塊給張三,10 ],服務(wù)端檢查到哈希值不正確就知道消息在傳輸過程中發(fā)生了錯誤。然而如果信息變成了[ 轉(zhuǎn)20000塊錢給張三,10 ],這個弱雞算法就不能幫助服務(wù)器檢查到這個錯誤。因此哈希算法基礎(chǔ)的要求就是碰撞(給定信息1,構(gòu)造另一段信息2,使得2的哈希值與1相等)的難度。

什么是安全性呢?

安全性包含兩個方面,假定 C 是你, S 是你女朋友。 S 給 C 發(fā)信息[ 給我打10000塊 ]。 C 的第一反應(yīng)是什么?是確認(rèn) S 真的是你女朋友。因此安全性的第一個方面是確定雙方的通信身份。

假如 C 想給 S 回復(fù)[ 今晚XXXX不可描述 ], C 需要確認(rèn)什么?一定是這段信息沒人在竊聽。這就是安全性的第二個方面。

如何解決第一個問題:C和S如何確定 你真的是你 ? 在 C 和 S 互為男女朋友的情況下,C可以和S約定一下暗號,比如 天王蓋地虎 對 小雞燉蘑菇 ,在每次通信之前先對一下暗號。

如果只有C和S通信,約定暗號自然是可行的。但是如果C或者S不只一個呢。比如有C1,C2,那么如果用同樣的暗號,C2知道暗號是什么后就可以欺騙S說自己是C1。如果都約定不同的暗號,那么假如有C1,C2,... ,C10000,那么就有S就需要記住10000個暗號,并且每新來一個C,就需要多記住一個暗號。

S表示,太累了?!敖o你們一段我的手寫體吧,以后你們驗證筆跡一樣就能確定我是我了”

"筆跡,太容易偽造了吧!", 數(shù)學(xué)表示,"是時候看我展現(xiàn)真正的實力了!"

困難問題在數(shù)學(xué)中通常是"討厭"的存在,數(shù)學(xué)家們會窮盡畢生去解決。密碼學(xué)卻是數(shù)學(xué)中的一個有趣的分支,它反其道而行之,核心是去證明某個問題是困難的。什么是困難問題?民科定義就是在 現(xiàn)有的公開的數(shù)學(xué) 下,要解決這個問題得花成百上千年。專業(yè)術(shù)語表達(dá)是 NP問題 ,或者從安全意義上說 解決這個問題獲得的利益小于解決問題付出的代價 。

"嘿嘿嘿,這道題你們做不出來,但是我有后門,我會做"。加密算法站了出來。

先用 非對稱加密 (加密密鑰和解密密鑰不相同)來解決 你真的是你 這個問題。

在非對稱算法中,有兩個密鑰,一個是公鑰,一個私鑰。通常情況下私鑰自己留著,公鑰給對外公開。私鑰加密后的信息,公鑰可以解密還原內(nèi)容。 由公鑰以及已經(jīng)發(fā)生過的加密解密信息推算出私鑰是一個困難問題 。

我們來嘗試構(gòu)造一個弱雞的非對稱算法,并假裝它是一個困難問題。

這個算法是這樣的,假定我們發(fā)出的信息只能是[1,2,3,4,5,...,10], 公鑰是10。并且我們自己保留私鑰7。加密算法是 (x+7)%17, 解密算法是 (x+10)%17。我們假裝通過10和已經(jīng)發(fā)生過的加解密的過程無法推算出私鑰7。

由于((x+7)%17+10)%17 = x, 比如對信息5加密,用私鑰7加密5+7=12,用公鑰10解密(12+10)%17=22%17=5, 就可以將信息還原。

有了這個算法,C需要驗證S的身份只需要說一句,“嘿,6加密后的數(shù)據(jù)是什么”,S算了以下回復(fù),“13”,客戶端用公鑰運算(13+10)%17果然是6,就可以快樂的回應(yīng),“來啦,老弟!”

在上面的場景中,有了非對稱密鑰算法,S可以換成說,“我的公鑰放在網(wǎng)上了,你們自己去拿,拿好以后,以后驗證我私鑰加密過的信息解密后就確認(rèn)我是我了”。(注:這里不談及CA及信任鏈,默認(rèn)C拿到證書后可以確認(rèn)這個證書確實是S的證書)

如何解決第二個問題:C和S如何確保通信沒有被竊聽,或者即使被竊聽也不能聽懂內(nèi)容究竟是什么?

在互聯(lián)網(wǎng)環(huán)境下,保證第一條是不可能的,公開網(wǎng)絡(luò)中任何一個節(jié)點都有可能被抓包解析。非對稱加密通過私鑰加密信息在網(wǎng)上傳輸可以應(yīng)對這個問題。但這樣做有兩個缺點:一個是非對稱加密通常相對比較慢,第二個問題是雖說非對稱加密是安全的,但架不住老是拿同樣的公鑰私鑰來傳輸大量的信息,這樣做會破壞它的安全性。因此,通常會選擇使用用公鑰溝通,得出一個在一次對話過程中使用的對稱加密(公鑰和私鑰相同)的密鑰來(密鑰交換協(xié)議),并在之后的通信中使用對稱加密算法來加密傳輸內(nèi)容,來保證傳輸過程的安全性。

對稱加密容易理解,這里不做多談。

注意:以上簡介均非規(guī)范描述,只是以簡化的形式來描述網(wǎng)絡(luò)通信面臨的安全問題以及解決的方法。

簡介中提到的對稱加密算法,非對稱加密算法,和沒有提及的如何在一次會話中采用安全的協(xié)議來溝通出對稱密鑰,均可以在 維基百科 上找到相應(yīng)的介紹。

7 Go密碼學(xué)(四) 非對稱加密之RSA

對稱加密有非常好的安全性,其加解密計算的性能也較高,但其有兩個重要缺點:

在如今開放的信息社會,秘鑰的管理愈加困難,非公開的秘鑰機(jī)制雖然破解較難,但還是有遭到攻擊的可能性,由于對稱加密需要加解密雙方共同握有私鑰,所有生成秘鑰的一方必須分發(fā)給另一方才能進(jìn)行安全通行,這就難免秘鑰在網(wǎng)絡(luò)中傳輸,網(wǎng)絡(luò)是不可靠的,其有可能被攔截或篡改。于是就產(chǎn)生了公開秘鑰體制,即服務(wù)方根據(jù)特定算法產(chǎn)生一對鑰匙串,自己持有私鑰小心保存,而公鑰公開分發(fā),在通信中,由公鑰加密進(jìn)行網(wǎng)絡(luò)傳輸,而傳輸?shù)男畔⒅荒苡伤借€解密,這就解決了秘鑰分發(fā)的問。公開秘鑰體制就是非對稱加密,非對稱加密一般有兩種用途:

如今的非對稱加密比較可靠的有RSA算法和ECC算法(橢圓曲線算法),RSA的受眾最多,但近年來隨著比特幣、區(qū)塊鏈的興起,ECC加密算法也越來越受到青睞。下面我們先介紹一下RSA加密算法的使用,ECC我們下一講展開。

公鑰密碼體系都是要基于一個困難問題來保證其安全性的,RSA是基于大數(shù)分解,將一個即使是計算機(jī)也無能為力的數(shù)學(xué)問題作為安全壁壘是現(xiàn)代密碼學(xué)的實現(xiàn)原理。講述這類數(shù)學(xué)問題需要龐雜的數(shù)論基礎(chǔ),此相關(guān)部分在此不再展開,感興趣的請出門右拐搜索歐幾里得證明、歐拉函數(shù)等數(shù)論部分知識。

Go標(biāo)準(zhǔn)庫中crypto/rsa包實現(xiàn)了RSA加解密算法,并通過crypto/x509包實現(xiàn)私鑰序列化為ASN.1的DER編碼字符串的方法,我們還使用編解碼包encoding/pem(實現(xiàn)了PEM數(shù)據(jù)編碼,該格式源自保密增強(qiáng)郵件協(xié)議,目前PEM編碼主要用于TLS密鑰和證書。)將公私鑰數(shù)據(jù)編碼為pem格式的證書文件。

使用以上加解密方法:


網(wǎng)站名稱:用go語言編寫非對稱密碼 用go語言編寫非對稱密碼是什么
文章出自:http://weahome.cn/article/ddjjesj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部