我正在使用名爲UMac32
的GNU加密類創建消息認證代碼。您可以在這裏閱讀文檔:
http://www.gnu.org/software/gnu-crypto/manual/api/gnu/crypto/mac/UMac32.html截斷GNU Umac32輸出長度
它現在正在工作,但我希望能夠獲得較短的輸出。有一個從接口繼承的字段,稱爲TRUNCATED_SIZE
,我認爲我可以用它來做,但不能按預期工作。
這裏是我的代碼:
String message = "Hello World!";
String MAC_KEY_MATERIAL = "gnu.crypto.mac.key.material";
String TRUNCATED_SIZE = "gnu.crypto.mac.truncated.size";
String NONCE_MATERIAL = "gnu.crypto.umac.nonce.material";
Map attributes = new HashMap();
attributes.put(MAC_KEY_MATERIAL, PRIVATE_KEY.getBytes());
attributes.put(TRUNCATED_SIZE, 4);
attributes.put(NONCE_MATERIAL, PRIVATE_NONCE.getBytes());
uMac32.init(attributes);
byte[] data = message.getBytes("ASCII");
uMac32.update(data, 0, message.length());
uMac32.digest();
從digest()
功能我得到一個字節數組的8
的長度是有可能得到使用此類較短的結果呢?預先
由於
它*可能*可以只是截斷值(我不知道這個mac如何工作,所以我不完全確定)。但我會懷疑是否明智的做法甚至比8bytes更短。假設MAC是理想的,那麼在64位的情況下,對於消息標籤僞造,平均可以接受2^63次嘗試的安全性。如果將其減少到比如說4個字節,平均縮短爲只有2^31 = = 2億個消息,以插入無效但經過身份驗證的消息。 – Perseids
假設一條消息的大小大約爲100bytes,這會使在線服務的攻擊範圍僅爲200gb左右。這對您的應用程序來說可能是或者可能不是可接受的風險。 – Perseids