告別OpenSSL琐簇,谷歌推出其取代軟件Tink

要說一個軟件對IT和互聯(lián)網(wǎng)業(yè)界影響力,恐怕OpenSS要算上一個摔吏。一個甚至主要版本還不到V1.2的軟件鸽嫂,占據(jù)了整改互聯(lián)網(wǎng)底層安全核心。SSH征讲、HTTPS,還有其他很多的基礎(chǔ)加密庫都是離不開OpenSSL的据某。

但是這么一個非常重要的基礎(chǔ)軟件,缺在管理上和經(jīng)費上屢屢爆出問題诗箍,以至于當(dāng)2014年爆發(fā)心臟出血時候癣籽,整個業(yè)界,甚至整個互聯(lián)網(wǎng)滤祖,技術(shù)圈內(nèi)的筷狼,非技術(shù)圈內(nèi)的也都震動了。

為了克服OpenSSL帶來的問題匠童,OpenBSD Fork了一個新的軟件LibreSSL埂材,以確保SSL的庫不會再出問題,基于OpenBSD的幾十年積累下來的安全口碑汤求,蟲蟲認(rèn)為這是一個非常好的替代俏险。同時各大公司也推出自己的SSL安全庫,比如亞馬遜就推出了s2n扬绪。

本文介紹的則是竖独,繼繼谷歌自己的BoringSSL和OpenBSD的LibreSSL之后,谷歌新發(fā)布的軟件Tink挤牛。他是一個多語言莹痢,跨平臺的安全加密庫。使用OpenSSL,系統(tǒng)有著復(fù)雜的綁定竞膳,并且通常專注于特定的系統(tǒng)航瞭,例如Windows中的DLL。 而Tink是開源的顶猜,專注于創(chuàng)建簡單的API沧奴,確保基礎(chǔ)架構(gòu)更具可移植性长窄。

AWS s2n

s2n(signal to noise),是對TLS/SSL協(xié)議的C99(c語言標(biāo)準(zhǔn))實現(xiàn),基于開發(fā)一個簡單纲菌,小巧挠日,快速伐割,并且優(yōu)先考慮安全性的理念來設(shè)計两蟀。s2n使用Apache License 2.0發(fā)布和許可。重點用于改進(jìn)TLS(傳輸層安全性)和使用更輕量級的方法世囊。s2n僅使用了6,000行代碼椅贱,定義了更專注懂算,更精簡的庫。當(dāng)然可能會隨著新版本的迭代而代碼增加庇麦,因為目前還只是一個基本的實現(xiàn)计技。

s2n是完全開源的,托管在GitHub中(github:awslabs/s2n )山橄,允許任何人review和fork代碼垮媒,你可以fork然后添加核心版本不支持的新功能。

亞馬遜對安全問題都很認(rèn)真航棱,能及時反應(yīng)社區(qū)發(fā)現(xiàn)的漏洞睡雇。還開展了與研究人員和學(xué)者合作的機制來解決新的問題。

認(rèn)識Tink

Tink是谷歌基于BoringSSL發(fā)布的SSL安全庫軟件饮醇,當(dāng)前版本版本為1.2.0(已經(jīng)超過了OpenSSL積累了幾十年的版本)它抱。Tink已經(jīng)在谷歌自己的應(yīng)用中得到了大量應(yīng)用。比如已經(jīng)集成到AdMob朴艰,Google Pay观蓄,Google智能助理和Firebase中了。

Tink集成了AEAD方法(經(jīng)過身份驗證的加密AE和經(jīng)過身份驗證的加密以及相關(guān)數(shù)據(jù))呵晚。集成了加密密鑰蜘腌,散列函數(shù)和消息驗證代碼(MAC)。

Tink中AEAD的最低標(biāo)準(zhǔn)包括[RFC5116]:

明文和相關(guān)數(shù)據(jù)可以具有任何長度(從0到232字節(jié))饵隙。

支持80位身份驗證撮珠。

CCA2安全性(自適應(yīng)選擇密文攻擊)。

谷歌分析了許多加密技術(shù)的弱點,在Tink中對他們做了專門修復(fù)芯急。

實例起步

基本的加密操作是使用對稱密鑰加密勺届,我們還是舉個傳統(tǒng)的例子Bob和Alice通訊:Bob和Alice使用相同的密鑰加密并解密。 Bob創(chuàng)建密鑰娶耍,然后將其安全地傳遞給Alice免姿,使用密鑰交換方法生成共享密鑰:

Tink就是用于簡化加密處理并盡可能使用安全、最佳加密方法榕酒。在下面我們使用"qwerty123"鍵加密一個字符串("napier")胚膊,注意示例代碼用了java,官方目前支持C++想鹰,OC和JAVA原生庫紊婉,相關(guān)可以查看官方倉庫,里面有詳細(xì)的文檔和范例辑舷。

package com.helloworld;

import com.google.crypto.tink.aead.AeadConfig;

import java.security.GeneralSecurityException;

import com.google.crypto.tink.Aead;

import com.google.crypto.tink.KeysetHandle;

import com.google.crypto.tink.aead.AeadFactory;

import com.google.crypto.tink.aead.AeadKeyTemplates;

public final class HelloWorld {

public static void main(String[] args) throws Exception {

AeadConfig.register();

try {

KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);

Aead aead = AeadFactory.getPrimitive(keysetHandle);

String plaintext="napier";

String aad="qwerty123";

System.out.println("Text:"+plaintext);

byte[] ciphertext = aead.encrypt(plaintext.getBytes(), aad.getBytes());

System.out.println("Cipher:"+ciphertext.toString());

byte[] decrypted = aead.decrypt(ciphertext, aad.getBytes());

String s = new String(decrypted);

System.out.println("Text:"+s);

} catch (GeneralSecurityException e) {

System.out.println(e);

System.exit(1);

}

}

}

范例運行過程如下:

Text: hello123

Password: qwerty

Type: 1

Enc type: 128-bit AES GCM

Cipher: AQbLoE0ino8ofgrvuSSLOKTaYjdPc/ovwWznuMeYfjP+TO1fc6cn7DE=

Cipher: 4151624C6F4530696E6F386F666772767553534C4F4B5461596A6450632F6F7677577A6E754D6559666A502B544F31666336636E3744453D

Decrypted: hello123

在本里中下喻犁,我們使用了帶GCM的128位AES(伽羅瓦/計數(shù)器模式)。我們的AEAD對象創(chuàng)建語句為:

KeysetHandle keysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);

然后使用encrypt()和decrypt()方法創(chuàng)建加密流何缓,并其進(jìn)行解密肢础。

好今天文章就介紹到這里,在撰寫本文的時候碌廓,我們得知golang和.net版本的Tink也已經(jīng)起步(github:elucidsoftllc/tink.net)传轰。如果有機會,我們會對其做更多的探索氓皱,并且第一時間給大家呈上結(jié)論路召。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市波材,隨后出現(xiàn)的幾起案子股淡,更是在濱河造成了極大的恐慌,老刑警劉巖廷区,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯灵,死亡現(xiàn)場離奇詭異,居然都是意外死亡隙轻,警方通過查閱死者的電腦和手機埠帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玖绿,“玉大人敛瓷,你說我怎么就攤上這事“叻耍” “怎么了呐籽?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我狡蝶,道長庶橱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任贪惹,我火速辦了婚禮苏章,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奏瞬。我一直安慰自己枫绅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布硼端。 她就那樣靜靜地躺著撑瞧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪显蝌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天订咸,我揣著相機與錄音曼尊,去河邊找鬼。 笑死脏嚷,一個胖子當(dāng)著我的面吹牛骆撇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播父叙,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼神郊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趾唱?” 一聲冷哼從身側(cè)響起涌乳,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甜癞,沒想到半個月后夕晓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡悠咱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年蒸辆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析既。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡躬贡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眼坏,到底是詐尸還是另有隱情拂玻,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纺讲,受9級特大地震影響擂仍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熬甚,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一逢渔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乡括,春花似錦肃廓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敷扫,卻和暖如春哀蘑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葵第。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工绘迁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人卒密。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓缀台,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哮奇。 傳聞我的和親對象是個殘疾皇子膛腐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)鼎俘,斷路器哲身,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,332評論 0 6
  • 1、不安全的隨機數(shù)生成而芥,在CSRF TOKEN生成律罢、password reset token生成等,會造成toke...
    nightmare丿閱讀 3,695評論 0 1
  • 今天棍丐,參加安徽中安供水項目人員的體檢误辑。 已經(jīng)培訓(xùn)取證完畢,欲前往內(nèi)蒙的外闖員工歌逢,也同時參加體檢巾钉。不出意外,在內(nèi)蒙的...
    微笑隨愿閱讀 547評論 0 5
  • 現(xiàn)代社會變化很快秘案,大多數(shù)人都不會像老領(lǐng)導(dǎo)們那樣在一個單位砰苍、一個行業(yè)干一輩子潦匈。在一個行業(yè)耕耘一生,是福氣也是束縛赚导;換...
    love_focus閱讀 356評論 0 0