MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKЕNT AXBOROT TЕXNOLOGIYALARI UNIVЕRSITЕTI
QARSHI FILIALI
AXBOROT XAVFSIZLIGI FAKULTЕTI
III BOSQICHAX-11-18-GURUH TALABASI
ABDURAXMONOV SHAHZODNING
“KRIPTOGRAFIYA 1” FANIDAN TAYORLAGAN
5-AMALIY ISHI
Bajardi: Abduraxmonov.sh
Tekshirdi: Elmurodova.B.
5-amaliy ish
Mavzu:OpenSSL kutubxonasidan foydalangan xolda blokli shifrlar yordamida ma’lumotlarni shifrlash
Ishdan maqsad: Zamonaviy blokli shifrlash algoritmlari asosida ma’lumotlarni shifrlash ko’nikmalariga ega bo’lish
Nazariy qism
Ushbu algoritm AQSH davlat shifrlash stanlarti DES kriptotahlil hujumiga uchragandan so’ng ishlab chiqildi va standart sifatida qabul qilindi. Ushbu standart DES dan farqli o’laroq turli xil kalit uzunliklaridan (128,192 va 256 bit) foydalanadi. Blokli shifrlashga asoslangan bo’lib, blok uzunligi 128 bitga teng bo’lib kalitga mos ravishda (10, 12 va 14) raund davomida shifrlanadi. AES shifrlash algoritmi matematik tomondan ko’phadlar ustida amal bajarishga asoslangan bo’lib, ma’lumotlar baytlab kiritiladi. AES shifrlash algoritmi har bir raundi quyidagi amallardan iborat : 1. SubBytes bosqichi. Ushbu bosqichda kiruvchi matritsa baytlari o’zgarmas S-box jadvali bo’yicha almashtiriladi. Kiruvchi ma’lumotlarning almashinish holati (AES) AES shifrlash algoritmida chiziqsiz funksiya sifatida SubBytes va MixColumns funksiyalaridan foydalanilgan.
BLOWFISH ALGORITMI
Blowfish algoritmi. Blowfish algoritmi B. Shnayer tomonidan ishlab chiqilgan bo‘lib, 1993 yilda e’lon qilingan. B. Shnayer algoritmga quyidagilarni asos qilib olingan. 1) Tezlik. 32 razryadli mikroprotsessorlarda Blowfish algoritmi 26 taktda shifrlaydi. 2) Kompaktlilik. Blowfish kompyuter xotirasida eng kamida 5 kilobayt joy egallaydi. 3) Oddiylik. Blowfish algoritmida qo‘shish, XOR, va tablitsadan o‘rin almashtirish qo‘llaniladi. Bu esa tahlilni osonlashtiradi. 4) O‘zgaruvchan bardoshlilik. Blowfish algoritmi kaliti uzunligi o‘zgaruvchan va 448 bitgacha yetish mumkin. Bu algoritm Feystel tarmog‘iga asoslangan bo‘lib, blokni uzunligi 64 bitga, raundlar soni 16 ga va raund kalitlari uzunligi esa 32 bitga teng. Blowfish shifrlash algoritmi i-raundi quyidagi funksional sxemada keltirilgan:
Li-1 Ri-1
S1 S2 S3 S4
Li=F(Li-1 XOR Ki) Ri-1 Ri=Li-1 Ki
Ki
32 bit
8 bit8 bit8 bit 8 bit
32 bit3 2 bit3 2 bit
32 bit 32 bit
32 Bit
32 bit
F(Li-1 XOR Ki)
Blowfish kriptoalgoritmining i-raundi .Blowfish kriptoalgoritmi raundilari F funksiyasi quyidagicha:
1) 32 bitli 1 iL chap qism 8 bitli ) ,,,( d cba qismlarga bo‘linadi. 2) ) ,,,( d cba 8 bitli qismlar Sbloklar yordamida o‘rin almashtiriladi. O‘rin almashtirish formulasi quyidagicha:
.2mod)))2mod)(((()( 32 ,4,3 32 ,2,11 d cbai S SXORSSLF
Bu yerda har bir S-blok 256 ta 32 bitli elementga ega, ya’ni 8 bitli sonni 32 bitli songa akslantirib beradi. Masalan, birinchi S-blok keltirilgan. Bu S-blokka kiruvchi qiymat 85 ga teng bo‘lsin, u holda S-blokdan chiquvchi qiymat sifatida S-blokning 85-o‘rnida joylashgan 0x21c6684216=56665094610=001000011100011001101000010000102 olinadi. Bu algoritm asosida yotadigan tamoyil qo‘llanish konstruksiyasining oddiyligidadir. Kriptoalgoritmda qo‘llanilgan: MOV, ADD va XOR amallari zamonaviy mikroprotsessor arxitekturalarida effektiv qo‘llaniladi. Blowfish algoritmida chap yarim blokning o‘zgarishi o‘ng yarim blok o‘zgarishiga olib keladi. Bundan tashqari kalitning o‘zgarishi har bir raunddan so‘ng chap va o‘ng yarim bloklarga ham ta’sir etadi. Algoritmda to‘rtta S-blok qo‘llanilgan bo‘lib, bu S- bloklarning kirishi 8 bitga va chiqishi 32 bitga teng, ya’ni har bir S-blokda 32 razradli 256 ta bir-birini takrorlamaydigan sonlar qatnashgan. S-bloklar maxfiy bo‘lgan holatda bitta S-blokni to‘liq tanlash 256! ni tashkil etadi. Bu algoritm Sbloklar ma’lum bo‘lgan holatda kalitlar generatsiyasida ishtirok etgan R -massivni differensial kriptotahlil usulida 1 82 r ta tanlab olingan ochiq ma’lumot va shifrma’lumot yordamida kalitni topish mumkin. 16 r da bu qiymat 129 2 ga teng. Akslantirishlarning keltirilgan xususiyatlari algoritmning samaradorligini oshirishga qaratilgan.
AES algoritm JAVA dasturlash tilida :
package com.company;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
String matn;
Scanner kirit=new Scanner(System.in);
matn=kirit.nextLine();
Cipher cipher=Cipher.getInstance("AES");
KeyGenerator kalit=KeyGenerator.getInstance("AES");
kalit.init(192);
SecretKey key= kalit.generateKey();
//SecretKeySpec key=new SecretKeySpec("salomsalomsaloma".getBytes(),"AES");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] bytes=cipher.doFinal(matn.getBytes());
for(byte b:bytes){
System.out.print(b);
}
System.out.println("\n");
Cipher decriptCipher1=Cipher.getInstance("AES");
decriptCipher1.init(Cipher.DECRYPT_MODE,key);
byte[] bytes2=decriptCipher1.doFinal(bytes,0,bytes.length);
for(byte b:bytes2){
System.out.print((char)b);
}}}
natijasi:
Do'stlaringiz bilan baham: |