CAST encryption

5

Click here to load reader

Transcript of CAST encryption

Page 1: CAST encryption

Aris Cahyadi Risdianto - 23210016ET 4085 – Keamanan Jaringan Telekomunikasi

CAST-128 Encryption

1. Pendahuluan

Algoritma ini diciptakan pada tahun 1996 oleh Carlisle Adams dan Stafford Tavares menggunakan prosedur desain Cast; salah satu anggota keluarga dari cipher CAST, Cast-256 (merupakan mantan kandidat AES) juga diturunkan dari CAST-128. Menurut beberapa sumber, nama Cast didasarkan pada inisial penemunya, meskipun Bruce Schneier laporan klaim penulis bahwa "nama harus menyulap gambar acak" (Schneier, 1996).Algoritma ini mirip dengan kriptografi DES dengan menggunakan sistem Substitusi Permutasi Network (SPN) yang tampaknya memiliki ketahanan yang baik terhadap kripto analisis diferensial, kripto analisis linear, dan kripto analisis related-key. Cipher ini juga memiliki sejumlah properti kriptografi lain yang diinginkan, termasuk Avalanche , Strict Avalanche Criterion (SAC), Bit Independence Criterion (BIC), tidak ada complementation property, dan tidak adanya kunci lemah dan kunci semi-lemah.

2. Deskripsi Algoritma

CAST-128 merupakan kelas algoritma enkripsi yang dikenal sebagai Feistel cipher, yang keseluruhan operasinya mirip dengan Data Encryption Standard (DES). Algoritma enkripsi yang lengkap diberikan dalam empat langkah berikut : INPUT : plain teks m1 ... m64, kunci K = k1 ... k128.OUTPUT : ciphertext c1 ... C64.

1. (Key Schedule) menghitung 16 pasang subkunci {KMI, Kri} dari K (Lihat Bagian 2.1 dan 2.4 untuk lebih detail).

2. (L0, R0) <- (m1. .. m64). Membagi plaintext ke kiri dan 32-bit kanan bagian L0 = m1 ... m32 dan R0 = M33 ... m64

3. (16 Rounds) untuk i dari 1 sampai 16, menghitung Li dan Ri sebagai berikut: Li = Ri-1, Ri = Li-1 ^ f (Ri-1, KMI, Kri), dimana f didefinisikan dalam Bagian 2.2 (F adalah

tipe 1, tipe 2, atau Tipe 3, tergantung pada i).4. c1 ... C64 <- (R16, L16). Mempertukarkan final cipher blok L16, R16 dan menggabungkannya

untuk membentuk ciphertext.

Dekripsi identik dengan algoritma enkripsi yang diberikan di atas, kecuali putaran (dan karena itu pasangan subkey) digunakan secara terbalik untuk menghitung (L0, R0) dari (R16, L16).

1

Page 2: CAST encryption

Aris Cahyadi Risdianto - 23210016ET 4085 – Keamanan Jaringan Telekomunikasi

2.1 Pairs Round Keys CAST-128 menggunakan sepasang subkeys untuk setiap putarannya: 32-bit Km digunakan sebagai kunci "masking" dan 5-bit Kr digunakan sebagai "Rotasi" tombol.

2.2. Non-Identical Rounds

Ada Tiga buah rounds function yang berbeda digunakan dalam CAST-128. Round tersebut adalah sebagai berikut (dimana "D" adalah input data ke fungsi f dan "Ia" - "Id" adalah byte paling signifikan ke bukan paling signifikan dari I). Perhatikan bahwa "+" dan "-" adalah penambahan dan pengurangan modulo 2 ** 32, "^" adalah bitwise XOR, dan "<<<" adalah melingkar kiri shift operasi.

2

Illustration 1: Three Rounds of The CAST-128 Block Cipher

Page 3: CAST encryption

Aris Cahyadi Risdianto - 23210016ET 4085 – Keamanan Jaringan Telekomunikasi

Tipe 1: I = ((KMI + D) <<<Kri) f = ((S1 [Ia] ^ S2 [Ib]) - S3 [Ic]) + S4 [Id] Tipe 2: I = ((^ KMI D) <<<Kri) f = (([Ia] S1 - S2 [Ib]) + S3 [Ic]) ^ S4 [Id] Tipe 3: I = ((KMI - D) <<<Kri) f = ((S1 [Ia] + S2 [Ib]) ^ S3 [Ic]) - S4 [Id] Putaran 1, 4, 7, 10, 13, dan 16 menggunakan fungsi f Tipe 1.Putaran 2, 5, 8, 11, dan 14 menggunakan fungsi f Tipe 2.Putaran 3, 6, 9, 12, dan 15 menggunakan fungsi f Tipe 3.

2.3 Substitution box CAST-128 menggunakan delapan kotak substitusi: s-box S1, S2, S3, dan S4 adalah s-box untuk round functions, sedangkan S5, S6, S7, dan S8 adalah s-box untuk key schedule. Meskipun 8 s-box memerlukan total 8 KByte ruang penyimpanan, perhatikan bahwa hanya 4 KByte yang diperlukan selama enkripsi aktual / dekripsi karena subkunci biasanya dibangkitkan sebelum setiap inputan data.

2.4 Key Schedule

Sebagai contoh kunci 128-bit tersebut adalah x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF, dimana x0 mewakili byte paling signifikan dan XF merupakan byte yang paling tidak signifikan.

Maka Z0 .. zF menjadi intermediate (sementara) byte, sedangkan Si [] merupakan s-box ke i dan simbol "^" merupakan penambahan XOR.Maka Subkunci yang terbentuk dari x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF kunci sebagai berikut.

z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA] z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9] zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB] K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] K2 = S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6] K3 = S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9] K4 = S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC] x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0] x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2] x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1] xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3] K5 = S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8] K6 = S5[x1] ^ S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD] K7 = S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3] K8 = S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7]

3

Page 4: CAST encryption

Aris Cahyadi Risdianto - 23210016ET 4085 – Keamanan Jaringan Telekomunikasi

z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA] z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9] zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB] K9 = S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9] K10 = S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC] K11 = S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2] K12 = S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6] x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0] x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2] x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1] xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3] K13 = S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3] K14 = S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7] K15 = S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8] K16 = S5[xE] ^ S6[xF] ^ S7[x1] ^ S8[x0] ^ S8[xD] z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA] z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9] zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB] K17 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] K18 = S5[zA] ^ S6[zB] ^ S7[z5] ^ S8[z4] ^ S6[z6] K19 = S5[zC] ^ S6[zD] ^ S7[z3] ^ S8[z2] ^ S7[z9] K20 = S5[zE] ^ S6[zF] ^ S7[z1] ^ S8[z0] ^ S8[zC] x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0] x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2] x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1] xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3] K21 = S5[x3] ^ S6[x2] ^ S7[xC] ^ S8[xD] ^ S5[x8] K22 = S5[x1] ^ S6[x0] ^ S7[xE] ^ S8[xF] ^ S6[xD] K23 = S5[x7] ^ S6[x6] ^ S7[x8] ^ S8[x9] ^ S7[x3] K24 = S5[x5] ^ S6[x4] ^ S7[xA] ^ S8[xB] ^ S8[x7] z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] z4z5z6z7 = x8x9xAxB ^ S5[z0] ^ S6[z2] ^ S7[z1] ^ S8[z3] ^ S8[xA] z8z9zAzB = xCxDxExF ^ S5[z7] ^ S6[z6] ^ S7[z5] ^ S8[z4] ^ S5[x9] zCzDzEzF = x4x5x6x7 ^ S5[zA] ^ S6[z9] ^ S7[zB] ^ S8[z8] ^ S6[xB] K25 = S5[z3] ^ S6[z2] ^ S7[zC] ^ S8[zD] ^ S5[z9] K26 = S5[z1] ^ S6[z0] ^ S7[zE] ^ S8[zF] ^ S6[zC] K27 = S5[z7] ^ S6[z6] ^ S7[z8] ^ S8[z9] ^ S7[z2] K28 = S5[z5] ^ S6[z4] ^ S7[zA] ^ S8[zB] ^ S8[z6] x0x1x2x3 = z8z9zAzB ^ S5[z5] ^ S6[z7] ^ S7[z4] ^ S8[z6] ^ S7[z0] x4x5x6x7 = z0z1z2z3 ^ S5[x0] ^ S6[x2] ^ S7[x1] ^ S8[x3] ^ S8[z2] x8x9xAxB = z4z5z6z7 ^ S5[x7] ^ S6[x6] ^ S7[x5] ^ S8[x4] ^ S5[z1]

4

Page 5: CAST encryption

Aris Cahyadi Risdianto - 23210016ET 4085 – Keamanan Jaringan Telekomunikasi

xCxDxExF = zCzDzEzF ^ S5[xA] ^ S6[x9] ^ S7[xB] ^ S8[x8] ^ S6[z3] K29 = S5[x8] ^ S6[x9] ^ S7[x7] ^ S8[x6] ^ S5[x3] K30 = S5[xA] ^ S6[xB] ^ S7[x5] ^ S8[x4] ^ S6[x7] K31 = S5[xC] ^ S6[xD] ^ S7[x3] ^ S8[x2] ^ S7[x8] K32 = S5[xE] ^ S6[xF] ^ S7[x1] ^ S8[x0] ^ S8[xD]

2.5 Variabel Keysize

Algoritma enkripsi Cast-128 telah dirancang untuk memungkinkan ukuran kunci yang dapat bervariasi dari mulai 40 bit hingga 128 bit, dengan kenaikan setiap 8-bit (maksudnya ukuran kunci yang diijinkan adalah 40, 48, 56, 64, ..., 112, 120, dan 128 bit). Spesifikasi untuk pengoperasian keysize variabel, adalah sebagai berikut:

1) Untuk ukuran kunci kurang dan sama dengan 80 bit (yaitu,, 40, 48, 56 64, 72, dan 80 bit), algoritma ini sama seperti yang ditetapkan tetapi hanya menggunakan 12 rounds saja, bukan 16 rounds

2) Untuk ukuran kunci lebih besar dari 80 bit, algoritma menggunakan 16 rounds penuh 3) Untuk ukuran kunci kurang dari 128 bit, kunci akan diisi dengan nol byte (di posisi paling

kanan, atau posisi paling tidak signifikan,) dari 128 bit yang kurang (karena Cast-128 key schedule mengasumsikan kunci input 128 bit).

Perhatikan bahwa meskipun-CAST 128 dapat mendukung semua 12 ukuran kunci terdaftar di atas, tetapi 40 bit, 64 bit, 80 bit, dan 128 bit adalah ukuran yang ditemukan utilitas di lingkungan typical. Oleh karena itu, kemungkinan besar akan cukup bagi sebagian besar implementasi untuk mendukung beberapa subset saja dari kunci hanya empat ukuran.

Untuk menghindari ambigu bila variabel operasi keysize digunakan, nama Cast-128 adalah dianggap sinonim dengan nama CAST5, yang memungkinkan keysize yang akan ditambahkan tanpa ambiguitas. Misalnya, Cast-128 dengan kunci 40-bit disebut sebagai CAST5-40, tetapi untuk kunci 128-bit secara eksplisit harus dimaksudkan, CAST5-128 harus digunakan.

3. Referensi

• Internet Engineering Task Force (IETF), RFC 2144, “The CAST-128 Encryption Algorithm”, May 1997

• English Wikipedia, “CAST-128”, 2010.

5