看了訊息認證碼的介紹後,小麗心想「如果用對稱密碼將訊息加密後再傳送的話,是不是就不需要訊息認證碼了呢?」原因有下:
1.對稱密碼的密文只有使用和加密時相同的金鑰才能正確解密;
2.如果解密金鑰和加密金鑰不同,解密之後也只能得到「看上去隨機的雜亂訊息」;
3.因此,只要解密之後得到的明文是正確的,就可以知道這條訊息室由持有相同金鑰的傳送者加密的;
4.也就是說,只用對稱密碼就可以實現和訊息認證碼相同的功能。
請問小麗的想法正確嗎?
小麗的想法部分正確,但並非完全正確。
的確,使用對稱密碼來對訊息進行認證是可能的,實際上也存在這樣的方法,但是這樣的方法是有侷限性的。
假設我們要傳送的明文就是隨機的位元序列,我們將明文用對稱密碼加密之後傳送出去,當接受者收到密文並進行解密時,明文看上去就是一串隨機的位元序列。那麼這段密文是來自正確的接受者呢?還是來自不正確的傳送者呢(偽裝的傳送者)呢?
「正確的傳送者用正確的金鑰加密的隨機位元序列」和「不正確的傳送者用錯誤的金鑰加密的任意位元序列」,兩者在解密後看上去都是隨機的位元序列,因此無法對它們進行區別。
小麗的思考過程1~4中,3中的「解密之後得到的明文是正確的」這一點是有問題的。要判斷「解密之後得到的明文是正確的」,就需要明文具備某種特定的結構(如存在頭尾,或者是像英文文章一樣存在概率偏向)。
注:這裡的「看起來隨機」是指對解密者而言。舉乙個例子:商品的數量為255,小麗對明文ff加密後得到l8f31,小明解密後得到fe,但小明並不能確認fe就是被篡改過後得到的明文,因為這個結果也在明文空間裡。
如果使用訊息認證碼,即便傳送的是隨機位元序列,我們也能夠正確地對訊息進行認證。
本質上來說,就是將訊息完整性的認證從預定結構的正確性判斷抽象到訊息認證碼單項雜湊函式的抗碰撞的性質上,從而使得訊息本身可以使用任意結構;同時可認證性使用共享金鑰保證。
題目來自:
《**密碼技術》第三版
訊息鑑別碼
訊息認證碼(MAC)
訊息認證碼 帶密碼的hash 能提取訊息的 指紋 訊息認證碼 mac message authentication code 是種訊息認證技術。傳送方a和接收方b共享金鑰 k,若a向b傳送訊息。則a計算利用c f k,m 計算mac值 然後將原始訊息m和c一起傳送給接收方。接收方b對收到的訊息m用相...
Lauren與密碼學8,訊息認證碼MAC
haorui lauren,還記得我們之前講的手套訂單問題嗎?lauren 記得裡面有很多安全問題,比如否認 抵賴,偽造 篡改等等。haorui 是的,我們學的hash函式可以解決篡改問題。lauren 是的,我們只要計算一下訂單的hash值就可以知道這個訂單在傳送的過程中是否被人篡改了。這樣說來,...
為什麼要使用訊息佇列
參考 訊息佇列本身有確認訊息被正確消費的機制 4.2message acknowledgment訊息確認 為了保證資料不被丟失,rabbitmq支援訊息確認機制,為了保證資料能被正確處理而不僅僅是被consumer收到,那麼我們不能採用no ack,而應該是在處理完資料之後傳送ack.在處理完資料之...