摘要演算法如何在SSL中防止資料被篡改

2021-08-14 11:27:54 字數 927 閱讀 1992

實際應用中特別在一些安全性要求高的通訊場景中往往要保證資料不被篡改.但對於一些資訊量大,資訊數量多的訊息直接進行加密解密過程會嚴重消耗效能.因此提出訊息摘要演算法,對訊息的摘要進行加解密的效能損耗遠小於對訊息整體進行加密,並且訊息摘要也可以檢測訊息是否被篡改.目前著名的摘要演算法有sha,md5等.下文是在ssl通訊中如何使用摘要演算法防止資料被篡改的簡單理解.

1,假設a有一量長訊息需要傳送給b,需要對訊息進行摘要.首先摘要演算法會對訊息整體進行特徵提取.這段特徵值就被稱為訊息的摘要.

提取出來的特徵值要能確保訊息在作任何乙個位置被篡改,篡改多少都能反映出來,即訊息被篡改了重新進行摘要操作總能得到與未篡改時不同的特徵值.相反地,不同的特徵值也意味著不同的訊息體.但無須通過特徵值還原訊息.即特徵值只能反映出訊息被篡改了,無法反映出訊息在何處被篡改,也無法通過特徵值還原丟失或者被刪除的訊息.

2,a使用b的公鑰對計算出來摘要進行加密,並將摘要和訊息(訊息明文)一併傳送給b.

假想a傳送給b的訊息被c截獲了,此時c對訊息明文可見.但c不能解碼出摘要內容(a使用b的公鑰傳送的摘要只有b的私鑰可以解密,而b的私鑰只有b才持有).設想此時c對訊息修改後重新做摘要,並使用b的公鑰進行加密,再傳送給b.此時b端解密出來的摘要已經被篡改,因此c的修改在b端通過了摘要驗證.這樣雖然對訊息進行摘要但仍然還是無法保證資料不被篡改.為了解決這個問題.要求a端不能只使用明文進行特徵提取,a端可以使用一些私密資訊(只有a和b知曉的訊息,c並不知情)與訊息明文一起混合提取特徵.這樣雖然c可以獲取明文,但對秘密資訊並不知情,c嘗試重新生成摘要時由於缺失私密資訊也無法生成被b成功驗證的摘要.這樣使用摘要演算法就防止了第三方對資料的篡改.

如何在PHP中防止SQL注入?

如何在php中防止sql注入?q 如果把使用者輸入的沒有任何改動的放到sql的查詢語句中,很有可能會導致sql注入,比如說下面的例子 unsafe variable post user input mysql query insert into table column values unsafe ...

如何在PHP中防止SQL注入?

如何在php中防止sql注入?高翔翻譯 q 如果把使用者輸入的沒有任何改動的放到sql的查詢語句中,很有可能會導致sql注入,比如說下面的例子 unsafe variable post user input mysql query insert into table column values un...

如何在指標中隱藏資料?

編寫 c 語言 時,指標無處不在。我們可以稍微額外利用指標,在它們內部暗中儲存一些額外資訊。為實現這一技巧,我們利用了資料在記憶體中的自然對齊特性。記憶體中的資料並非儲存在任意位址。處理器通常按照其字大小相同的塊讀取記憶體資料 那麼考慮到效率因素,編譯器會按照塊大小的整數倍對記憶體中的實體進行位址對...