Java加密之IV

原文鏈接:https://www.dubby.cn/detail.html?id=9097

AES是一種分組密碼。

密碼學(xué)中,分組(block)密碼的工作模式(mode of operation)允許使用同一個(gè)分組密碼密鑰對多于一塊的數(shù)據(jù)進(jìn)行加密,并保證其安全性。分組密碼自身只能加密長度等于密碼分組長度的單塊數(shù)據(jù),若要加密變長數(shù)據(jù),則數(shù)據(jù)必須先被劃分為一些單獨(dú)的密碼塊。通常而言,最后一塊數(shù)據(jù)也需要使用合適填充方式將數(shù)據(jù)擴(kuò)展到匹配密碼塊大小的長度。一種工作模式描述了加密每一數(shù)據(jù)塊的過程,并常常使用基于一個(gè)通常稱為初始化向量的附加輸入值以進(jìn)行隨機(jī)化,以保證安全。

而不同的工作模式的實(shí)現(xiàn)細(xì)節(jié)也不相同,在Java中,指定加密算法的字符串是AES/ECB/PKCS5Padding,也就是“算法/模式/填充方式”。而IV就和工作模式有關(guān)。常見的工作模式包括,ECB、CBC、PCBC、CFB、OFB、CTR等。

ECB

加密:


image

解密:


image

CBC

加密:


image

解密:


image

PCBC

加密:


image

解密:


image

根據(jù)上面的幾張圖可以看出,ECB模式下是不需要IV的,而CBC和PCBC是需要IV的。

那么IV的取值有什么需要注意的呢?

在密碼學(xué)的領(lǐng)域里,初始化向量(英語:initialization vector,縮寫為IV),或譯初向量,又稱初始變量(starting variable,縮寫為SV),是一個(gè)固定長度的輸入值。一般的使用上會要求它是隨機(jī)數(shù)或擬隨機(jī)數(shù)(pseudorandom)。使用隨機(jī)數(shù)產(chǎn)生的初始化向量才能達(dá)到語義安全(散列函數(shù)與消息驗(yàn)證碼也有相同要求),并讓攻擊者難以對同一把密鑰的密文進(jìn)行破解。在區(qū)塊加密中,使用了初始化向量的加密模式被稱為區(qū)塊加密模式。

初始化向量的值依密碼算法而不同。最基本的要求是“唯一性”,也就是說同一把密鑰不重復(fù)使用同一個(gè)初始化向量。這個(gè)特性無論在區(qū)塊加密或流加密中都非常重要。

許多要求初始化向量必須讓攻擊者無法預(yù)測。這種要求一般使用隨機(jī)數(shù)或擬隨機(jī)數(shù)來達(dá)到。在這種應(yīng)用中,重復(fù)的初始化向量是可以被忽略的,但是生日攻擊的問題依然得列入考量,因?yàn)槿粝蛄靠梢员活A(yù)測,會讓攻擊者找到撤消明文的線索。

初始化向量的值主要還是取決于密碼算法。其做法不外乎就是隨機(jī)或指定(stateful)。使用隨機(jī)的方式則取值由發(fā)送方計(jì)算,并要將向量值送交給接收方。指定的方式則是讓收發(fā)兩方分享初始化向量所能指定的所有值(state),這些值收發(fā)雙方必須預(yù)先就定義好。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 夏天傍晚的雨 怎么說呢 是喜歡還是不喜歡 它澆涼了炎熱的暑氣 卻也打消了我攢了一整天想出門的念頭 終于等到了雨停 ...
    _Celeste_閱讀 430評論 0 0
  • DES 算法原理 DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位,其算法主要分為兩...
    Astrophel_06c5閱讀 485評論 0 0
  • 我要走遍世上的每一條路,度過深沉的悲傷,莫名的哀愁,無盡的喜悅,只求放手一搏體驗(yàn)人生,追求靈魂中的星辰?!?/div>
    潘思璇閱讀 289評論 0 0
  • 人生如夢 夢想是帆 每個(gè)人都有一個(gè)屬于自己的夢想 我有一個(gè)夢想 藍(lán)藍(lán)的天上白云朵朵 我有一個(gè)夢想 田野里麥浪滾滾,...
    李木只閱讀 397評論 2 6

友情鏈接更多精彩內(nèi)容