Salsa20 ogimli shifrlash algoritmi va uning kriptotahlili.
Salsa20 - Daniel Bernshteyn tomonidan ishlab chiqilgan oqim shifrlash tizimi
Algoritm eSTREAM tanlovida taqdim etildi , uning maqsadi pochta tizimlari
tomonidan uzatiladigan ma'lumotlarni shifrlash uchun Evropa standartlarini yaratish
edi. Algoritm birinchi profil (yuqori o‘tkazuvchanlikka ega dasturiy ilovalar uchun
oqim shifrlari) bo‘yicha tanlovda g‘olib chiqdi.
Salsa20 shifrida quyidagi operatsiyalar qo'llaniladi:
32 bitli raqamlarni qo'shish;
bit bo'yicha qo'shish moduli 2 (xor);
bit siljishi.
Algoritm 20 tur bilan hash funktsiyasidan foydalanadi . Uning asosiy
o'zgarishlari AES algoritmiga o'xshaydi .
Keyinchalik biz so'zni {0,1,…,2 32 −1} to'plamining elementi sifatida ko'rib
chiqamiz va uni 0x prefiksi bilan o'n oltilik shaklda yozamiz.
Ikki so'z modulini qo'shish operatsiyasi 2 32 " belgisi bilan belgilanadi.
+{\displaystyle +}" Eksklyuziv yoki (bit bo'yicha yig'indi) belgisi bilan
belgilanadi.
⊕
{\displaystyle \oplus}»
𝑐
{\displaystyle c}- bit tsiklik chap so'z siljishi
𝑢
{\displaystyle u}belgilaymiz
𝑢
⋘
𝑐
{\displaystyle u\lll c}. Agar
𝑢
{\displaystyle
u}qanday qilib tasavvur qiling
𝑢
= ∑
𝑖
=02
𝑖𝑢𝑖
{\displaystyle u=\sum
_{i=0}2^{i}u_{i}}, Keyin
𝑢
⋘
𝑐
= ∑
𝑖
=02
𝑖
+
𝑐
mod32
𝑢𝑖
{\displaystyle u\lll c=\sum _{i=0}2^{i+c\mod 32}u_{i}}
chorak(y)
Tizimning asosiy bloki transformatsiyadir
𝑞𝑢𝑎𝑟𝑡𝑒𝑟𝑟𝑜𝑢𝑛𝑑
(
𝑦
){\ displaystyle quarterround(y)}to'rt so'zdan ortiq. Quyida
tavsiflangan umumiy o'zgarishlar undan qurilgan.
Uning mohiyati shundan iboratki, biz har bir so'z uchun oldingi ikkitasini
qo'shamiz, yig'indini ma'lum sonli bitlarga siljitamiz va tanlangan so'z bilan natijani
bitma-bit yig'amiz. Keyingi operatsiyalar so'zlarning yangi ma'nolari bilan amalga
oshiriladi.
Buni taxmin qilaylik
𝑦
{\displaystyle y} - 4 ta so'z ketma-ketligi
𝑦
=(
𝑦
0,
𝑦
1,
𝑦
2,
𝑦
3)
{\displaystyle y=(y_{0},y_{1},y_{2},y_{3})}keyin funksiya
𝑞𝑢𝑎𝑟𝑡𝑒𝑟𝑟𝑜𝑢𝑛𝑑
(
𝑦
)=(
𝑧
0,
𝑧
1,
𝑧
2,
𝑧
3)
{\displaystyle quarterround(y)=(z_{0},z_{1},z_{2},z_{3})}Qayerda
𝑧
1=
𝑦
1
⊕
((
𝑦
0+
𝑦
3)
⋘
7),{\displaystylez_{1}=y_{1}\oplus ((y_{0}+y_{3})\lll
7),}
𝑧
2=
𝑦
2
⊕
((
𝑧
1+
𝑦
0)
⋘
9),{\displaystyle z_{2}=y_{2}\oplus ((z_{1}+y_{0})\lll
9),}
𝑧
3=
𝑦
3
⊕
((
𝑧
2+
𝑧
1)
⋘
13),{\displaystyle z_{3}=y_{3}\oplus ((z_{2}+z_{1})\lll
13),}
𝑧
0=
𝑦
0
⊕
((
𝑧
3+
𝑧
2)
⋘
18).{\displaystyle z_{0}=y_{0}\oplus ((z_{3}+z_{2})\lll
18).}
Masalan:
choraklik(0x00000001; 0x00000000; 0x00000000; 0x00000000)
= (0x08008145; 0x00000080; 0x00010200; 0x20500000)
Siz bu funktsiyani y 0 , y 1 , y 2 va y 3 so'zlarining transformatsiyasi deb
hisoblashingiz mumkin . Ushbu o'zgarishlarning har biri, xuddi butun funktsiya
kabi, qaytariladi.
rowround(y)
𝑦
=(
𝑦
0
𝑦
1
𝑦
2
𝑦
3
𝑦
4
𝑦
5
𝑦
6
𝑦
7
𝑦
8
𝑦
9
𝑦
10
𝑦
o'n bir
𝑦
12
𝑦
13
𝑦
14
𝑦
15)
{\displaystyle
y={\begin{pmatrix}y_{0}&y_{1}&y_{2}&y_{3}\\y_{4}&y_{5}&y_{6}&y_{7}\
\y_{8
}&y_{9}&y_{10}&y_{11}\\y_{12}&y_{13}&y_{14}&y_{15}\end{pmatrix}}}
|