AES

AES

AES কেন ব্যবহার করব?

ধরে নেওয়া যাক, হ্যাকারের কাছে একটা সুপারকম্পিউটার আছে যেটা ১ এক্সাফ্লপ (১ বিলিয়ন বিলিয়ন ক্যালকুলেশন প্রতি সেকেন্ডে)  পরিমাণ কম্পিউটেশন করতে পারে। সাধারণ DES এনক্রিপশনে ৫৬ বিটের key ব্যবহার করা হয়, তার মানে মোট সম্ভাব্য key = ২৫৬ । 

১ এক্সাফ্লপ =  ১০১৮ 

অতএব,কম্পিউটারটির ব্রুট ফোর্স মেথডে key ক্র্যাক করতে সময় লাগবে = 

৫৬ / ১০১৮ = ০.০৭২ সেকেন্ড । 

অর্থাৎ প্রচলিত সুপারকম্পিউটার দিয়ে এই এনক্রিপশন সহজেই ভেঙ্গে ফেলা যায়।

এবার আসি AES প্রসঙ্গে । AES এর তিনটি ভার্শন আছে key সাইজের ওপর ভিত্তি করে, এদের মধ্যে সবচেয়ে ছোট সাইজের key ব্যবহার করে AES-128 ( ১২৮ বিটের key)। এক্ষেত্রে সম্ভাব্য মোট key = ২১২৮  । 

একই মেশিন ও মেথড ব্যবহার করে key ক্র্যাক করতে সময় লাগবে =

 ২১২৮ / ১০১৮ = প্রায় ৩.৪X১০২০ সেকেন্ড = ১.০৮X১০১৩ বছর, যা মহাবিশ্বের বয়সকালকেও ছাপিয়ে যায়!  এ থেকে সহজেই অনুমান করা যায়, বর্তমান সময়ে নিরাপদ এনক্রিপশনের জন্য AES কেন ব্যবহার করা হয় । 

Figure-1

এবার A,B,C,D – প্রতিটি সেগমেন্টে কীভাবে একটা ডেটাব্লককে প্রসেস করে ফাইনালি এনক্রিপ্টেড রূপ দেওয়া হয়, সেটাই আমরা দেখবো ।

সেগমেন্টA :  স্টেট অ্যারে তৈরি (initializing state array)

এই অ্যালগরিদমে ১২৮ বিটের প্লেইনটেক্সট ব্লক এনক্রিপ্ট করা হয়, যাকে বাইট এককে ভাগ করে, প্রতি ভাগে ১৬ বাইট হিসেবে একটি ৪ X ৪ দ্বিমাত্রিক স্টেট অ্যারেতে সাজানো হয়। 

Figure-2

এখানে একেকটা কলাম, একেকটা ওয়ার্ড নির্দেশ করে। প্রতি ওয়ার্ডের সাইজ ৪ বাইট বা ৩২ বিট ।  Figure-2 কে এভাবেও লেখা যায়ঃ          [   W0         W1          W2         W3    ]      

সেগমেন্টB :  প্রাথমিক  ট্রান্সফরমেশন (initial transformation)

Figure-3

AES অ্যালগরিদমের তিনটি ভার্শন আছে key সাইজের ওপর ভিত্তি করে এবং key সাইজের ওপর রাউন্ড সংখ্যাও নির্ভরশীল । Figure-1 এ সে কারণেই সুনির্দিষ্ট রাউন্ড সংখ্যার বদলে N এবং সুনির্দিষ্ট key সাইজের বদলে M বাইট ব্যবহার করা হয়েছে। আমরা আমাদের উদাহরণের জন্য key সাইজ ধরে নিচ্ছি ১২৮ বিট এবং Figure-2.3 অনুসারে আমাদের রাউন্ড সংখ্যা হবে ১০। 

প্রথমে ১২৮ বাইটের key-কে অ্যালগরিদমের সাহায্যে এক্সপান্ড করা হয় (এর পদ্ধতি পরবর্তীতে আলোচনা করা হয়েছে ) । ১২৮ বিটের কী থেকে যেখানে  ৪ ওয়ার্ডের অ্যারে তৈরি করা পসিবল, এক্সপানশনের কারণে সেটা ৪৪ ওয়ার্ডের একটা অ্যারেতে পরিণত হয়।  এর মধ্যে প্রথম ৪ ওয়ার্ড এই সেগমেন্ট অর্থাৎ initial transformation এর জন্য এবং বাকি ৪০ ওয়ার্ড  পরবর্তী ১০ রাউন্ডের জন্য ব্যবহার করা হয় ।  

[  K0    K1    K2    K3    K4    K5  . . . . . . . .  K43  ]  

এবার আসি ট্রান্সফরমেশন প্রসঙ্গে। এই ধাপে [  K0    K1    K2    K3    ] – এই চারটি key ওয়ার্ড , স্টেট অ্যারের corresponding চারটি ওয়ার্ড  [  W0     W1     W2     W3   ] এর সাথে XOR অপারেশনে লিপ্ত হয় বা আরো সুনির্দিষ্টভাবে বলতে গেলে, key ওয়ার্ডের প্রতিটি বাইটের সাথে, স্টেট অ্যারের প্রতিটি বাইটের মধ্যে XOR অপারেশন করা হয়, যেমন-  

S0,0 = S0,0(XOR)K0,0     

S0,1 = S0,1(XOR)K0,1   

    ………………………………

S3,3 = S3,3(XOR)K3,3    

Figure-4

এই ধাপে শুধু XOR অপারেশন করা হয়, তাই ইনিশিয়াল ট্রান্সফরমেশন মূলত একটি  AddRoundKey() operation. 

সেগমেন্ট C :  i-তম রাউন্ডের ট্রান্সফরমেশন 

এই সেগমেন্টে ১০ টি রাউন্ড রয়েছে, N-তম রাউন্ড ব্যতীত বাকি রাউন্ডগুলোতে যে ৪টি  ট্রান্সফরমেশন পারফর্ম করা হয়, সেগুলো ধাপে ধাপে দেখে নেওয়া যাকঃ

  • Substitute bytes
  • Shift rows                                                      
  • Mix columns 
  • Add round key

 Substitute bytes:

 এই ধাপে ১৬ X ১৬ সাইজের একটি লুক-আপ টেবিল ব্যবহার করা হয়। নিচে একটি আদর্শ টেবিলের নমুনা দেখানো হল :

Figure-5

যেহেতু এই টেবিলটি সাবস্টিটিউশন এর কাজে ব্যবহার করা হয়, এটিকে s-box বলা হয়। 

যেভাবে substitute করা হয়:

১. আমাদের স্টেট অ্যারের প্রতিটি সেল ১ বাইট বা ৮ বিট পরিমাণ ডেটা স্টোর করে, রাইট? এখন এই ৮ বিট ডেটাকে আমরা দুটো ভাগে ভাগ করব, ১ম ভাগের ৪ বিট রো আর ২য় ভাগের ৪ বিট কলাম নির্দেশ করে। প্রতি ৪ বিট দিয়ে রো-কলাম উভয় দিকে ২^৪ = ১৬ টি কম্বিনেশন পসিবল যা আমাদের লুক-আপ টেবিলের (১৬X১৬) সাইজের সমান! (উভয় দিকে এই ১৬ টি বাইনারি সংখ্যাকে তাদের সমতুল্য হেক্সাডেসিমেল সংখ্যায় টেবিলে প্রকাশ করা হয়)

Figure-6

২. এবার ১ম(০,০) সেলের প্রথম ৪ বিটের সমতুল্য হেক্সাডেসিমেল সংখ্যা থেকে রো পজিশন আর পরের ৪ বিটের সমতুল্য হেক্সাডেসিমেল সংখ্যা থেকে কলাম পজিশন বের করে, লুক-আপ টেবিলের ঐ রো-কলাম পজিশনে থাকা ভেল্যু দিয়ে সেলের ভেল্যু রিপ্লেস বা সাবস্টিটিউট করে ফেলব। 

এভাবে অ্যারের প্রতিটি সেলের জন্য আমরা সাবস্টিটিউশন সম্পন্ন করব এবং আপডেটেড এই স্টেট অ্যারে পরবর্তী ধাপ “Shift Rows” এর জন্য একদম প্রস্তুত!

এখানে সাবস্টিটিউশনের আগের ও পরের একটি নমুনা স্টেট অ্যারে দেখানো হলো:

Figure-7

Shift Rows: 

এই ধাপটা এক কথায় খুবই সহজ! স্টেট অ্যারের প্রতিটি রো-কে, তার ইনডেক্স নাম্বারের সমপরিমাণ বাইট বামে শিফট করব, অর্থাৎ ০-তম রো ০ বাইট(কোনো শিফট হবে না), ১ম রো ১ বাইট, ২য় রো ২ বাইট, আর ৩য় রো ৩ বাইট বামে শিফট করব। এই পারমুটেশনের ফলে আমাদের স্টেট অ্যারের চেহারা দাঁড়াবে এরকম : 

Figure-8

Mix columns:

এই ধাপে আমরা একটা সিম্পল ম্যাট্রিক্স গুণের কাজ করব, এজন্য আমরা একটা 4X4 ম্যাট্রিক্স ব্যবহার করব (এটা গালুইয়ের ফিল্ড (Galois field)থেকে আসে, আলোচ্য নয় বলে বিস্তারিত বলা হলো না)। এই ম্যাট্রিক্সকে, স্টেট অ্যারের প্রতিটি কলাম (ওয়ার্ড) দিয়ে গুণ করে প্রাপ্ত নতুন ওয়ার্ড দিয়ে পুরনো ওয়ার্ডকে রিপ্লেস করে ফেলব। 

Figure-9

N-তম রাউন্ডে এই ট্রান্সফরমেশন ধাপটা স্কিপ করা হয়। 

Add round key :

এটা হুবহু ইনিশিয়াল ট্রান্সফরমেশন সেগমেন্টের (B) স্টেট অ্যারের সাথে রাউন্ড key যোগের (মূলত XOR) অনুরূপ, ওটা দেখে আসতে পারো এখান থেকে । 

তৈরি হয়ে গেল আমাদের কাঙ্ক্ষিত সাইফারটেক্সট! স্টেট অ্যারেকে পুনরায় ১২৮ বিটের ব্লকে সাজিয়ে ফেলব আমরা । 

Share on:

Category:

Leave a Reply

Your email address will not be published. Required fields are marked *

RECENT POST