rust實現;
目錄br位元重組
f非線性函式
金鑰裝入
基於zuc的加密演算法
基於zuc的訊息認證演算法
附錄參考資料
zuc主要由lfsr線性反饋移位暫存器, br位元重組和f非線性函式三部分組成;
工作階段:
\(z_0||z_1||z_2||z_3\);
lfsr初始化模式
\(s_0, s_1, \dots, s_ = s_1, s_2,\dots, s_\)
lfsr工作模式
\(s_0, s_1, \dots, s_ = s_1, s_2,\dots, s_\)
l_1(x)
:
l_2(x)
:
s(x)
:
金鑰裝入是將128位長的金鑰\(k\)和128位長的初始向量\(iv\)擴充套件為16個31位長的字, 並放入lfsr的16個暫存器\(s_0,s_1,\dots,s_\)中的過程.
\(s_i = k_i || rightmost_(kd[i]) || iv_i\), \(kd\)是大小為16的元素為16位長度的常量表(見附錄), \(rightmost_l(x)\)表示取\(x\)的最右邊\(l\)位位元位;
輸入引數
位長度附註
count
32計數器
bearer
5承載層標識
direction
1傳輸方向標識
ck128
金鑰length
32明文訊息流的位長度
ibslength
輸入位元流
輸出引數
位長度附註
obslength
輸出位元流
輸入引數
位長度附註
count
32計數器
bearer
5承載層標識
direction
1傳輸方向標識
ck128
完整性金鑰
length
32明文訊息流的位長度
mlength
輸入位元流
輸出引數
位長度附註
mac32
訊息認證碼
\(t = t\oplus k_^\);
\(mac = t\oplus k_^\)
const s_0: [u8;256] = [
0x3e,0x72,0x5b,0x47,0xca,0xe0,0x00,0x33,0x04,0xd1,0x54,0x98,0x09,0xb9,0x6d,0xcb,
0x7b,0x1b,0xf9,0x32,0xaf,0x9d,0x6a,0xa5,0xb8,0x2d,0xfc,0x1d,0x08,0x53,0x03,0x90,
0x4d,0x4e,0x84,0x99,0xe4,0xce,0xd9,0x91,0xdd,0xb6,0x85,0x48,0x8b,0x29,0x6e,0xac,
0xcd,0xc1,0xf8,0x1e,0x73,0x43,0x69,0xc6,0xb5,0xbd,0xfd,0x39,0x63,0x20,0xd4,0x38,
0x76,0x7d,0xb2,0xa7,0xcf,0xed,0x57,0xc5,0xf3,0x2c,0xbb,0x14,0x21,0x06,0x55,0x9b,
0xe3,0xef,0x5e,0x31,0x4f,0x7f,0x5a,0xa4,0x0d,0x82,0x51,0x49,0x5f,0xba,0x58,0x1c,
0x4a,0x16,0xd5,0x17,0xa8,0x92,0x24,0x1f,0x8c,0xff,0xd8,0xae,0x2e,0x01,0xd3,0xad,
0x3b,0x4b,0xda,0x46,0xeb,0xc9,0xde,0x9a,0x8f,0x87,0xd7,0x3a,0x80,0x6f,0x2f,0xc8,
0xb1,0xb4,0x37,0xf7,0x0a,0x22,0x13,0x28,0x7c,0xcc,0x3c,0x89,0xc7,0xc3,0x96,0x56,
0x07,0xbf,0x7e,0xf0,0x0b,0x2b,0x97,0x52,0x35,0x41,0x79,0x61,0xa6,0x4c,0x10,0xfe,
0xbc,0x26,0x95,0x88,0x8a,0xb0,0xa3,0xfb,0xc0,0x18,0x94,0xf2,0xe1,0xe5,0xe9,0x5d,
0xd0,0xdc,0x11,0x66,0x64,0x5c,0xec,0x59,0x42,0x75,0x12,0xf5,0x74,0x9c,0xaa,0x23,
0x0e,0x86,0xab,0xbe,0x2a,0x02,0xe7,0x67,0xe6,0x44,0xa2,0x6c,0xc2,0x93,0x9f,0xf1,
0xf6,0xfa,0x36,0xd2,0x50,0x68,0x9e,0x62,0x71,0x15,0x3d,0xd6,0x40,0xc4,0xe2,0x0f,
0x8e,0x83,0x77,0x6b,0x25,0x05,0x3f,0x0c,0x30,0xea,0x70,0xb7,0xa1,0xe8,0xa9,0x65,
0x8d,0x27,0x1a,0xdb,0x81,0xb3,0xa0,0xf4,0x45,0x7a,0x19,0xdf,0xee,0x78,0x34,0x60,
];const s_1: [u8;256] = [
0x55,0xc2,0x63,0x71,0x3b,0xc8,0x47,0x86,0x9f,0x3c,0xda,0x5b,0x29,0xaa,0xfd,0x77,
0x8c,0xc5,0x94,0x0c,0xa6,0x1a,0x13,0x00,0xe3,0xa8,0x16,0x72,0x40,0xf9,0xf8,0x42,
0x44,0x26,0x68,0x96,0x81,0xd9,0x45,0x3e,0x10,0x76,0xc6,0xa7,0x8b,0x39,0x43,0xe1,
0x3a,0xb5,0x56,0x2a,0xc0,0x6d,0xb3,0x05,0x22,0x66,0xbf,0xdc,0x0b,0xfa,0x62,0x48,
0xdd,0x20,0x11,0x06,0x36,0xc9,0xc1,0xcf,0xf6,0x27,0x52,0xbb,0x69,0xf5,0xd4,0x87,
0x7f,0x84,0x4c,0xd2,0x9c,0x57,0xa4,0xbc,0x4f,0x9a,0xdf,0xfe,0xd6,0x8d,0x7a,0xeb,
0x2b,0x53,0xd8,0x5c,0xa1,0x14,0x17,0xfb,0x23,0xd5,0x7d,0x30,0x67,0x73,0x08,0x09,
0xee,0xb7,0x70,0x3f,0x61,0xb2,0x19,0x8e,0x4e,0xe5,0x4b,0x93,0x8f,0x5d,0xdb,0xa9,
0xad,0xf1,0xae,0x2e,0xcb,0x0d,0xfc,0xf4,0x2d,0x46,0x6e,0x1d,0x97,0xe8,0xd1,0xe9,
0x4d,0x37,0xa5,0x75,0x5e,0x83,0x9e,0xab,0x82,0x9d,0xb9,0x1c,0xe0,0xcd,0x49,0x89,
0x01,0xb6,0xbd,0x58,0x24,0xa2,0x5f,0x38,0x78,0x99,0x15,0x90,0x50,0xb8,0x95,0xe4,
0xd0,0x91,0xc7,0xce,0xed,0x0f,0xb4,0x6f,0xa0,0xcc,0xf0,0x02,0x4a,0x79,0xc3,0xde,
0xa3,0xef,0xea,0x51,0xe6,0x6b,0x18,0xec,0x1b,0x2c,0x80,0xf7,0x74,0xe7,0xff,0x21,
0x5a,0x6a,0x54,0x1e,0x41,0x31,0x92,0x35,0xc4,0x33,0x07,0x0a,0xba,0x7e,0x0e,0x34,
0x88,0xb1,0x98,0x7c,0xf3,0x3d,0x60,0x6c,0x7b,0xca,0xd3,0x1f,0x32,0x65,0x04,0x28,
0x64,0xbe,0x85,0x9b,0x2f,0x59,0x8a,0xd7,0xb0,0x25,0xac,0xaf,0x12,0x03,0xe2,0xf2,
];
const kd: [u16;16] = [
0x44d7,0x26bc,0x626b,0x135e,0x5789,0x35e2,0x7135,0x09af,
0x4d78,0x2f13,0x6bc4,0x1af1,0x5e26,0x3c4d,0x789a,0x47ac,
];
流密碼(序列密碼)與Rc4演算法
流密碼 序列密碼 與rc4演算法 rc4是一種序列密碼,它是一種可變金鑰長度 面向位元組操作的序列密碼,乙個明文位元組與乙個金鑰位元組相異或產生乙個密文位元組。演算法原理 對於n 8位長的字,即以乙個位元組為單位,此時n 256,用從1到256個位元組的可變長度金鑰初始化乙個256個位元組的狀態向量...
古典密碼演算法 替代密碼演算法
替代密碼演算法 的原理是使用替代法進行加密,就是將明文中的字元用其它字元替代後形成密文。例如 明文本母a b c d 用d e f g做對應替換後形成密文。替代密碼包括多種型別,如單錶替代密碼 多明碼替代密碼 多字母替代密碼 多表替代密碼等。下面我們介紹一種典型的單錶替代密碼,愷撒 caesar 密...
古典密碼演算法 替代密碼演算法
替代密碼演算法 的原理是使用替代法進行加密,就是將明文中的字元用其它字元替代後形成密文。例如 明文本母a b c d 用d e f g做對應替換後形成密文。替代密碼包括多種型別,如單錶替代密碼 多明碼替代密碼 多字母替代密碼 多表替代密碼等。下面我們介紹一種典型的單錶替代密碼,愷撒 caesar 密...