Encryption

確定性數據屏蔽

  • June 19, 2021

我們正在建構數據屏蔽框架,主要是為了屏蔽 PII。我們的規模非常大,並且掩蔽將在攝取時完成,因此我們希望以非常高效的方式完成掩蔽。我們的一些限制是我們希望掩蔽是確定性和可逆的。我在我的 macbook 上查看了 AES 加密來加密 PII,尤其是 AES SIV,大約需要 2 毫秒,這對於我們的規模可能並不理想。

如果有更快(和確定性)的 AES SIV 替代方案,或者 AES 加密有任何其他替代方案,那麼很高興聽到社區的消息。

這是我的加密方法。我正在使用 Cryptodome.Cipher AES


   def encrypt(key: bytes, text: str) -> str:
       nonce = None
       cipher = None
       encoded_text = text.encode('utf-8')

       nonce = get_random_bytes(AES.block_size)
       cipher = AES.new(key, AES.MODE_SIV, nonce=nonce)
       cipher_text, tag = cipher.encrypt_and_digest(encoded_text)

       ret_cipher_text = nonce + cipher_text
       ret_cipher_text = tag + ret_cipher_text
       return b64encode(ret_cipher_text).decode()

對於小文本,這種加密的性能約為 2 毫秒。

這裡的問題很可能是Python而不是AES

借助硬體支持 (AES-NI),如果您有足夠多的獨立 AES 任務(例如,使用計數器模式),AES 通常可以以不到 1 個 CPU 週期/字節的速度計算,如果沒有,則大約 2-5 個 CPU 週期/字節(例如CBC模式)。

AES-SIV現在通過將類似 CBC 的操作與其輸出用作計數器模式的初始計數器連結來有效地工作。因此,對於優化實現,預期性能約為每字節 3-6 個週期。

1GHz CPU 上的 2 毫秒(您的時鐘可能更高)大約是 200 萬個 CPU 週期。即使假設在帶有 AES-NI 的舊 CPU 上實現非常糟糕,“糟糕”的實現也會達到大約 20-30 個週期/字節,但遠不及 200

所以這個問題很可能與解釋器必須做的比編譯/優化解釋更多有關。

引用自:https://crypto.stackexchange.com/questions/91640