Aşağıda açıklandığı gibi bir CipherSaber şifreleme programı uygulayın. Kuralları:
- Bayt cinsinden en küçük giriş kazanır.
- Bununla birlikte, kod golf normlarından ayrılırken, ciddi golf girişleri olmasa bile ilginç girişler yayınlayabilirsiniz.
- Girdi, normalde düz metni standart girdiden alan bir programdır ve şifreli metni standart çıktıya yazar (anahtar tarafından (kullanıcı tarafından) tercih ettiğiniz şekilde yazar.
- Ancak, bunu bir prosedür olarak uygulamak istiyorsanız, bu da iyidir.
- IV, kriptografik olarak güvenli bir sözde sayı üreticisinden gelmelidir. Diliniz bunu desteklemiyorsa, farklı bir dil seçin. ;-)
- Lütfen kriptoya özgü kitaplıklar, sistem çağrıları veya talimatlar kullanmayın (yukarıda belirtildiği gibi PRNG dışında). Tabii ki, jenerik düşük seviyeli bitsel operasyonlar iyidir.
CipherSaber, RC4 / Arcfour'un bir çeşididir, bu yüzden ikincisini tanımlayarak başlayacağım, daha sonra CipherSaber'ın yaptığı değişiklikler.
0. RC4 / Arcfour
Arcfour başka bir yerde tam olarak belirtilmiştir , ancak bütünlük için burada açıklayacağım. (İnternet taslağı ile bu açıklama arasında herhangi bir tutarsızlık olması durumunda, eski kural normatiftir.)
Anahtar kurulumu
Anahtarın ilk baytı ve sonuncusu olmak üzere iki diziyi S
ve S2
her ikisi de 256 uzunluğunu ayarlayın .k_1
k_n
S = [0, ..., 255]
S2 = [k_1, ..., k_n, k_1, ...]
( S2
256 baytın tümü dolana kadar anahtarın baytlarıyla tekrar tekrar doldurulur.)
Ardından, j
0 olarak başlatın ve 256 kez karıştırın:
j = 0
for i in (0 .. 255)
j = (j + S[i] + S2[i]) mod 256
swap S[i], S[j]
end
Bu tuş kurulumunu tamamlar. S2
Dizi artık burada kullanılır ve temizlendi olabilir.
Şifre akışı oluşturma
Sıfırlayın i
ve j
0'a gidin, ardından anahtar akışını aşağıdaki gibi oluşturun:
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
Verileri şifreleme / şifresini çözme
- Şifrelemek için, anahtar akışı çıktısını düz metinle XOR yapın
- Şifresini çözmek için, anahtar akışı çıktısını şifreleme metniyle XOR yapın
1. CipherSaber
CipherSaber (bu soruda uyguladığımız şey budur) RC4 / Arcfour'un iki şekilde bir varyasyonudur:
10 bayt IV / nonce
Bir mesaj şifrelenirken, via gibi 10 rastgele bayt alınmalı /dev/urandom
ve şifreli çıktının ilk 10 baytına yazılmalıdır. Bir mesajın şifresini çözerken, girişin ilk 10 baytı onu şifrelemek için kullanılan IV'tür.
RC4 / Arcfour anahtar kurulum aşaması, kullanıcı tarafından belirtilen parolanın yukarıda açıklandığı ve birleştirme passphrase || IV
olduğu anahtar olarak çalıştırılır . Yani, "Merhaba dünya!" ve "supercalif" in bir IV'ü (ancak bu olası değildir: -P) "Merhaba dünya! supercalif" in bir anahtarıyla sonuçlanır.passphrase
IV
||
Tuş kurulumunun çoklu yinelemeleri
WEP şifrelemesini tamamen bozan güvenlik açığının önlenmesine yardımcı olmak için, RC4'ün anahtar kurulum aşamasının karıştırma döngüsü kullanıcı tarafından belirtilen sayıda çalıştırılır. Değeri j
yinelemeler arasında tutulmalıdır.
2. Test vektörleri
İşte programlarınızı test etmek için kullanabileceğiniz bazı test vektörleri . Ayrıca, ossifrage sonuçlarınızı doğrulamak için kullanabileceğiniz bir CipherSaber şifreleme ve şifre çözme aracı oluşturdu.
Yalnızca şifreleme programını uygulamanız gerekir. Şifre çözme programını sağlamanız gerekmez, ancak doğru anahtarı kullanarak doğru şekilde uygulanan bir şifre çözme programı ile işlendiğinde şifreleme programınızın çıktısı orijinal girdiye doğru şekilde geri dönmelidir.
urandom
"kazanmayı" önemsiyorsanız , (isterseniz ayrı bir giriş olabilir) bir sürüm yapabilirsiniz. :-)