Menerapkan program enkripsi CipherSaber , seperti yang dijelaskan di bawah ini. Pedoman:
- Entri terkecil, dalam byte, menang.
- Entri biasanya berupa program yang mengambil plaintext dari input standar, dan menulis ciphertext ke output standar, dengan kunci yang ditentukan (oleh pengguna) dengan cara yang Anda inginkan.
- Namun, jika Anda ingin menerapkan ini sebagai prosedur, itu juga baik-baik saja.
- IV harus berasal dari generator nomor pseudorandom yang aman secara kriptografis. Jika bahasa Anda tidak mendukung itu, pilih yang lain. ;-)
- Tolong jangan gunakan perpustakaan khusus crypto, panggilan sistem, atau instruksi (selain dari PRNG, sebagaimana ditentukan di atas). Tentu saja, operasi bitwise tingkat rendah umum tidak apa-apa.
CipherSaber adalah varian dari RC4 / Arcfour, jadi saya akan mulai dengan menjelaskan yang terakhir, lalu perubahan yang dilakukan oleh CipherSaber.
0. RC4 / Arcfour
Arcfour sepenuhnya ditentukan di tempat lain , tetapi untuk kelengkapan, saya akan menjelaskannya di sini. (Dalam hal terjadi perbedaan antara konsep Internet dan deskripsi ini, yang pertama adalah normatif.)
Pengaturan kunci
Siapkan dua array, S
dan S2
, keduanya dengan panjang 256, di mana k_1
byte pertama dari kunci, dan k_n
yang terakhir.
S = [0, ..., 255]
S2 = [k_1, ..., k_n, k_1, ...]
( S2
diisi dengan byte kunci, lagi dan lagi, sampai semua 256 byte diisi.)
Kemudian, inisialisasi j
ke 0, dan kocok 256 kali:
j = 0
for i in (0 .. 255)
j = (j + S[i] + S2[i]) mod 256
swap S[i], S[j]
end
Ini menyelesaikan pengaturan kunci. The S2
array tidak lagi digunakan di sini, dan dapat digosok.
Pembuatan stream cipher
Inisialisasi i
dan j
ke 0, lalu buat stream kunci sebagai berikut:
i = 0
j = 0
while true
i = (i + 1) mod 256
j = (j + S[i]) mod 256
swap S[i], S[j]
k = (S[i] + S[j]) mod 256
yield S[k]
end
Mengenkripsi / mendekripsi data
- Untuk mengenkripsi, XOR output keystream dengan plaintext
- Untuk mendekripsi, XOR output keystream dengan ciphertext
1. CipherSaber
CipherSaber (yang kami implementasikan dalam pertanyaan ini) adalah variasi RC4 / Arcfour dalam dua cara:
10 byte IV / nonce
Saat mengenkripsi pesan, 10 byte acak harus diperoleh, seperti via /dev/urandom
, dan dituliskan ke dalam 10 byte pertama dari output terenkripsi. Saat mendekripsi pesan, 10 byte pertama dari input adalah IV yang digunakan untuk mengenkripsi pesan.
Tahap pengaturan kunci RC4 / Arcfour dijalankan dengan passphrase || IV
sebagai kunci, di mana passphrase
frasa sandi yang ditentukan pengguna, IV
seperti yang dijelaskan di atas, dan ||
digabungkan. Jadi, frasa sandi dari "Halo, dunia!" dan infus "supercalif" (namun tidak mungkin yaitu :-P) akan menghasilkan kunci "Halo, dunia! supercalif".
Beberapa iterasi pengaturan tombol
Untuk membantu mencegah kerentanan yang membuat enkripsi WEP benar-benar rusak, loop pengocokan pada tahap pengaturan kunci RC4 dijalankan beberapa kali sesuai yang ditentukan pengguna. Nilai j
harus dipertahankan antara iterasi.
2. Tes vektor
Berikut adalah beberapa vektor uji yang dapat Anda gunakan untuk menguji program Anda. Selain itu, osif squeamish menciptakan alat enkripsi & dekripsi CipherSaber yang dapat Anda gunakan untuk memvalidasi hasil Anda.
Anda hanya perlu mengimplementasikan program enkripsi. Anda tidak perlu menyediakan program dekripsi, tetapi output program enkripsi Anda harus melakukan bolak-balik dengan benar ke input asli ketika diproses dengan program dekripsi yang diimplementasikan dengan benar menggunakan kunci yang benar.
urandom
(yang bisa menjadi entri terpisah jika Anda mau) jika Anda peduli tentang "menang". :-)