加密你的資料並使其免受攻擊者的攻擊

2021-09-23 07:39:32 字數 2346 閱讀 5402

密碼學俱樂部的第一條規則是:永遠不要自己發明密碼系統。密碼學俱樂部的第二條規則是:永遠不要自己實現密碼系統:在現實世界中,在實現以及設計密碼系統階段都找到過許多漏洞。

python 中的乙個有用的基本加密庫就叫做 cryptography。它既是乙個「安全」方面的基礎庫,也是乙個「危險」層。「危險」層需要更加小心和相關的知識,並且使用它很容易出現安全漏洞。在這篇介紹性文章中,我們不會涵蓋「危險」層中的任何內容!

cryptography 庫中最有用的高階安全功能是一種 fernet 實現。fernet 是一種遵循最佳實踐的加密緩衝區的標準。它不適用於非常大的檔案,如千兆位元組以上的檔案,因為它要求你一次載入要加密或解密的內容到記憶體緩衝區中。

fernet 支援對稱symmetric(即金鑰secret key)加密方式*:加密和解密使用相同的金鑰,因此必須保持安全。

生成金鑰很簡單:

>>> k = fernet.fernet.generate_key()

>>> type(k)

這些位元組可以寫入有適當許可權的檔案,最好是在安全的機器上。

有了金鑰後,加密也很容易:

>>> frn = fernet.fernet(k)

>>> encrypted = frn.encrypt(b"x marks the spot")

>>> encrypted[:10]

b'gaaaaabb1'

如果在你的機器上加密,你會看到略微不同的值。不僅因為(我希望)你生成了和我不同的金鑰,而且因為 fernet 將要加密的值與一些隨機生成的緩衝區連線起來。這是我之前提到的「最佳實踐」之一:它將阻止對手分辨哪些加密值是相同的,這有時是攻擊的重要部分。

解密同樣簡單:

>>> frn = fernet.fernet(k)

>>> frn.decrypt(encrypted)

b'x marks the spot'

請注意,這僅加密和解密位元組串。為了加密和解密文字串,通常需要對它們使用 utf-8 進行編碼和解碼。

20 世紀中期密碼學最有趣的進展之一是公鑰public key加密。它可以在發布加密金鑰的同時而讓解密金鑰保持保密。例如,它可用於儲存伺服器使用的 api 金鑰:伺服器是唯一可以訪問解密金鑰的一方,但是任何人都可以儲存公共加密金鑰。

雖然 cryptography 沒有任何支援公鑰加密的安全功能,但 pynacl 庫有。pynacl 封裝並提供了一些很好的方法來使用 daniel j. bernstein 發明的 nacl 加密系統。

nacl 始終同時加密encrypt和簽名sign或者同時解密decrypt和驗證簽名verify signature。這是一種防止基於可伸縮性malleability-based的攻擊的方法,其中攻擊者會修改加密值。

加密是使用公鑰完成的,而簽名是使用金鑰完成的:

>>> from nacl.public import privatekey, publickey, box

>>> source = privatekey.generate()

>>> with open("target.pubkey", "rb") as fpin:

... target_public_key = publickey(fpin.read())

>>> enc_box = box(source, target_public_key)

>>> result = enc_box.encrypt(b"x marks the spot")

>>> result[:4]

b'\xe2\x1c0\xa4'

解密顛倒了角色:它需要私鑰進行解密,需要公鑰驗證簽名:

>>> from nacl.public import privatekey, publickey, box

>>> with open("source.pubkey", "rb") as fpin:

... source_public_key = publickey(fpin.read())

>>> with open("target.private_key", "rb") as fpin:

... target = privatekey(fpin.read())

>>> dec_box = box(target, source_public_key)

>>> dec_box.decrypt(result)

b'x marks the spot'

最後,pocketprotector 庫構建在 pynacl 之上,包含完整的金鑰管理方案。

via: 

本文由 lctt 原創編譯,linux中國 榮譽推出

Juniper推出基於雲的全球攻擊者資料庫

本文講的是 juniper推出基於雲的全球攻擊者資料庫,it168 資訊 2月26日訊息,rsa2013大會第一天,瞻博網路就推出了一款全球型資料庫用於追蹤單獨裝置上的攻擊行為。瞻博網路的這款產品旨在保護一切,包括個人裝置和資料中心。首先推出的這款spotlight secure是基於雲計算的攻擊者...

攻擊者是如何利用「隱寫技術」的?

據稱,在不久的將來,隱寫技術將越來越多地用於攻擊中。那麼,攻擊者如何使用隱寫術,以及企業應該如何抵禦基於隱寫術的攻擊?nick lewis 隱寫術是指在普通郵件中隱藏秘密訊息的技術。通過使用隱寫術 例如加密技術 攻擊者可儘量減少他們的攻擊被發現的機會。但與加密一樣,有效使用隱寫技術也需要正確的部署。...

密碼學安全性證明中的挑戰者和攻擊者

challenger 的中文意思是挑戰者,在密碼學裡,我們卻應理解為接受挑戰的人。在密碼學裡,要考慮ind cca安全,往往考慮乙個遊戲.遊戲的參與者包括敵手 attacker 和受挑戰者 challenger 遊戲的規則是這樣的 attacker先選兩個明文m和n然後challenger隨機選擇乙...