Encryption
確定性數據屏蔽
我們正在建構數據屏蔽框架,主要是為了屏蔽 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萬。
所以這個問題很可能與解釋器必須做的比編譯/優化解釋更多有關。