官术网_书友最值得收藏!

1.16 MacGuffin加密算法

MacGuffin是由美國的Matt Blaze和Bruce Schneier在1994年劍橋快速軟件密碼會議上提出的一個分組密碼,它采用非平衡Feistel結構。MacGuffin加密算法在分組長度、應用范圍和加密框架方面都與DES加密算法非常類似,它的輸入分組長度為64比特,密鑰長度為128比特,迭代層數為32層(從理論上講,密鑰長度和迭代層數可以任意變化)。Matt Blaze和Bruce Schneier設計該算法的主要目的是希望密碼分析人員對使用非平衡Feistel結構的密碼非線性函數的強度進行分析,同時也希望它成為DES加密算法的替代品。

算法描述如下:

將64比特的輸入分成左右不等的兩部分,左邊L0為16比特,右邊R0為48比特,將右邊的48個比特從左到右分成abc三個16比特的字,與48比特的層密鑰進行模2加,經過8個S盒后輸出的16比特與左邊的16比特進行模2加,模2加的結果(16比特)輸入右邊的右端,左邊移出的16比特成為下一層的左邊。

該算法的非線性部分是8個S盒,每個S盒的輸入為6比特,輸出為2比特。S盒的輸入是從右邊48比特中固定位置選出的6比特。令r15代表r的最高有效比特,r0代表r的最低比特。MacGuffin加密算法的S盒如表1.16.1所示。

表1.16.1 MacGuffin加密算法的S

從每個S盒的abc三部分中各取2比特合在一起作為輸入,8個S盒各自輸出的2比特,按表1.16.2所示的位置組成一個16比特的字t,其中t0t的最低比特,t15為最高比特。

表1.16.2 MacGuffin加密算法S盒的輸出表

MacGuffin加密算法的加密過程偽代碼如下:

left, a, b, c  I
for i=0 to 31 do
{
    for j=1 to 8 do
    t<=Sj(aK[i,0], bK[i,1], cK[i,2])
    left  left⊕t
    left, a, b, c  a, b, c, left
}
O  left, a, b, c

和DES加密算法不同,MacGuffin加密算法的層密鑰不是由初始密鑰直接移位和抽取得到的,而是以初始密鑰為輸入,經MacGuffin加密算法反復加密,以輸出的結果作為層密鑰的。32個層密鑰都為48比特,將第i個層密鑰記成3個16比特字K[i,0]、K[i,1]、K[i,2]。生成層密鑰過程的偽代碼如下:

K=0
left, a, b, c  k0...k63
for h=0 to 31 do
{
    for i=0 to 31 do
    {
        for j=1 to 8 do
        t<=Sj(aK[i,0], bK[i,1], cK[i,2])
        left  left⊕t
        left, a, b, c  a, b, c, left
    }
    K[h,0]  left
    K[h,1]  a
    K[h,2]  b
}
left, a, b, c  k64...k127
for h=0 to 31 do
{
    for i=0 to 31 do
    {
        for j=1 to 8 do
        t<=Sj(aK[i,0], bK[i,1], cK[i,2])
        left  left⊕t
        left, a, b, c  a, b, c, left
    }
    K[h,0]  K[h,0]⊕left
    K[h,1]  K[h,1]⊕a
    K[h,2]  K[h,2]⊕b
}

上述偽代碼中,“←”表示賦值;K[i, j]表示第i個層密鑰的第j個16比特,“<=”表示合并且賦值。

8個S盒如下:

主站蜘蛛池模板: 北票市| 嘉鱼县| 庄河市| 陆良县| 秦安县| 奇台县| 蒙自县| 利津县| 怀宁县| 英超| 沙田区| 嵩明县| 晋江市| 周宁县| 信宜市| 化德县| 万盛区| 三江| 常山县| 崇信县| 博爱县| 钟祥市| 南召县| 新晃| 静安区| 淮南市| 永安市| 乳山市| 庆云县| 浙江省| 安阳县| 徐闻县| 许昌市| 象州县| 荆门市| 驻马店市| 曲靖市| 十堰市| 清流县| 赤峰市| 荣成市|