forum.ge
reklama
FORUM.GE წესები  · დახმარება  · ძებნა  · წევრები  · კალენდარი  · ფოსტა  · ჩატი
  გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

> ECB კრიპტ-დეკტიპტორ, განამრტებითურთ
VakhoQor
Super Member


****
ჯგუფი: Registered
წერილები: 470
წევრი No.: 121774
რეგისტრ.: 29-September 10

გამოგზავნილია: 15 Aug 2011, 12:31  #26913098      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
user posted image


როგორც ვიცით, თანამედროვე კრიპროგრაფიაში წამოვიდა მიმართლება ასიმეტრიულისა და სიმეტრიულისა, თითოეული თავის ქვე დარგებად იყოფა (დამავიწყდა ამას დამატებული პროტოკოლი ცალკე). მინდა გაჩვენოთ ჩემი დაწერილი ECB mode , რომელიც არის Block Cipher -იდან, მიმართლება სიმეტრიული კრიპტოგრაფია.



CODE

/*########################    EnyCript   #################### */

function Enycript()
{
document.getElementById('CiperTexT').value=null;

var PlainTexT=document.getElementById('PlainTexT').value;
PlainTexT= PlainTexT.toString();



if(document.getElementById('ECB').checked)

{ // <== Start ECB  

var n,i,j,key;

key=new Array();
n = Number(document.getElementById('length').value);

var x,setX=0;

if((PlainTexT.length)%n!=0)
{
  do{
 
               if(setX==0) { x="x";  setX=1; }
     else if(setX==1) { x="0";  setX=2; }
   else if(setX==2) { x="1"; setX=3; }
   else if(setX==3) { x="0"; setX=0; }

       
    PlainTexT=PlainTexT+x;
     
    }while(PlainTexT.length%n!=0);
}

var PLGN=PlainTexT.length/n;

var KeyString=document.getElementById('key').value;
KeyString=KeyString.toString();



j=0;
var first=0;
for(i=1; i<=n; i++)
{
 
j++;
   while(KeyString.charAt(j-1)!="," )
   {
   
         if(KeyString.charAt(j-1)==""){
     break;
     }
   
     if(first==0){
     key[i]="";
     first=1;
     }    
   key[i]=key[i]+KeyString.charAt(j-1);
   j++;
   } first=0;
   
}


 var M = new Array();
 var C = new Array();  
 for(i=1; i<=PLGN; i++){
 M[i]=new Array();
 C[i]=new Array();
 }


 for(i=1; i<=PLGN; i++)
 {  
     for(j=1; j<=n; j++)
     {
     M[i][j]=PlainTexT.substr(0,1);
     PlainTexT=PlainTexT.substr(1);
     }
 
 }

 var Encoded= "";
 for(i=1; i<=PLGN; i++)
 {
     for(j=1; j<=n; j++)
     {  
       var KEY=key[j];
       C[i][j]=M[i][KEY];
       Encoded=Encoded+C[i][j];
     }
     
 }
 document.getElementById('CiperTexT').value=Encoded;
} // <== END ECB
 
else if(document.getElementById('FCB').checked){
alert("EMPTY, FCB");
}

}
/*########################    END EnyCript   #################### */



/*########################   START  DECRYPT   #################### */

function Decript()
{

 if(document.getElementById('ECB').checked)
 {
  document.getElementById('PlainTexT').value=null;
 
        var Cipertext=document.getElementById('CiperTexT').value;
        Cipertext= Cipertext.toString();
       
        var i,j,key , n;

       n = Number(document.getElementById('length').value);
       var PLGN=(Cipertext.length)/n;  // CiperTexT length : block length    
           
      key=new Array();      
      var KeyString=document.getElementById('key').value;
      KeyString=KeyString.toString();    
   
 j=0;
 var first=0;
 for(i=1; i<=n; i++)
 {  
 j++;
     while(KeyString.charAt(j-1)!="," )
     {    
            if(KeyString.charAt(j-1)==""){
       break;
      }
     
      if(first==0){
      key[i]="";
      first=1;
      }    
     
            key[i]=key[i]+KeyString.charAt(j-1);
            j++;            
    } first=0;    
   
 }
 
 var E = new Array();
 var D = new Array();  
 for(i=1; i<=PLGN; i++){
 E[i]=new Array();
 D[i]=new Array();
 }

 for(i=1; i<=PLGN; i++)
 {  
     for(j=1; j<=n; j++)
     {
     E[i][j]=Cipertext.substr(0,1);
     Cipertext=Cipertext.substr(1);
     }
 
 }

 for(i=1; i<=PLGN; i++)
 {
     for(j=1; j<=n; j++)
     {  
       var KEY=key[j];
       D[i][KEY]=E[i][j];
     }
     
 }
 
 var Decoded= "";
 for(i=1; i<=PLGN; i++)
 {
    for(j=1; j<=n; j++)
    {
      Decoded=  Decoded+D[i][j];
    }
 }
 
 document.getElementById('PlainTexT').value=Decoded;
}


}
/*########################   END DECRYPT   #################### */


var comma=0;
function keyLength(){
var KeyStr=document.getElementById('key').value;
var Len= document.getElementById('length').value;
if (KeyStr.charAt(KeyStr.length-1)==",") comma++;


if(comma >=Len)
document.getElementById('key').value=document.getElementById('key').value.substring(0, KeyStr.length-1);
}

function Clear(){
// document.getElementById('key').value=null;
// document.getElementById('length').value=null;
document.getElementById('CiperTexT').value=null;
document.getElementById('PlainTexT').value=null;

}

function KeyCHECK(){

if (document.getElementById('length').value=="")  
document.getElementById('vector').value='Firslty, Enter Length';

if(document.getElementById('length').value!="")
document.getElementById('vector').maxLength=document.getElementById('length').value;
}



დეტალები:

თუ არის გასაღების სიგრძე 5, მაშინ გასაღებში უნდა იყოს 12 რიცხვი მძიმეებით გამოყოფილი (1 დან 12 მდე),
მაგალითად: 5,4,3,1,2,12,10,9,11,8,7,6,5

აქ, როგორც მერე მითხრეს split() ფუნქციით შემეძლო ამომეკრიფა რიცხვებით, თუმცა ეს არ ვიცოდი, თან ინსტიტუტში მიმავალ ავტობუსში ვფიქრობდი ამაზე და ჩემი ალგორითმი მივუწერე (უნივესიტეტამდე სანამ მივიდა ავტოვუსი მოვასწარი biggrin.gif )
CODE

var KeyString=document.getElementById('key').value;
KeyString=KeyString.toString();
j=0;
 var first=0;
 for(i=1; i<=n; i++)
 {  
 j++;
     while(KeyString.charAt(j-1)!="," )
     {    
            if(KeyString.charAt(j-1)==""){
       break;
      }
     
      if(first==0){
      key[i]="";
      first=1;
      }          
            key[i]=key[i]+KeyString.charAt(j-1);
            j++;            
    } first=0;        
 }





მოკლედ გაუგებარი რომ არ იყოს, დავწერ ცოტას კრიპტოგრაფიაზე:

კვლევები კრიპტოგრაფიაში იწყება 1970-წლიდან, თუმცა, ამჟამად მეცნიერთა მიერ დაარსებულია ორგანიზაცია IACR (( International Association for Cryptologic Research) , სადაც ყოველდღიურად ათასობით სამეცნიერო ნაშრომები იწერება. 1970 წლამდე კრიპტოგრაფიის გამოყენების არეალი არ სცილდებოდა სამხედრო თუ პოლიტიკურ საქმიანობას, თუმცა შემდგომ, უფრო კი 1980 წლებიდან, დაიწყო კრიპტოგრაფიის გამოყენება როგორც ტელეკომუნიკაციებში, ისე მობილურ სისტემებსა და კომპიუტერულ მოწყობილობებში. დღეისათვის კი wireless ინტერნეტი, ბანკნომატები, კრედიტ კარტები, სატრანსპორტო სისტემები, თვით ელექტრო კარებებიც კი იყენებენ კრიპტოგრაფიულ ალგორითმებს. ასევე დიდი გამოყენებას ჰპოვებს კრპტოგრაფია სატელეფონო ქსელებში, როდესაც ტელეფონიდან სატელეფონო ანძამდე ხმოვანი შეტყობინებები გადაიცემა დაშიფრულად, რაც ვფიქრობ უდიდესი მიღწევაა კრიპტოგრაფიის.

კრიპტოგრაფია იყოფა ასიმეტრიულად, სიმეტრიულად და პროტოკოლად. თვითონ სიმეტრიული block ciper და stream cipher -ად. ასიმეტრიული ზუსტად როგორ და რანაერად მუშაობს არ ვიცი, არ მისწავლია ჯერ smile.gif



საზოგადოდ, თუ გიორგი უგზავნის დაშიფრულ კოდს ანის, მან უნდა გამოიყენოს დასაშიფრად K გასაღები, ხოლო ანიმ გამშიფრავი D გასაღები. (გასაშიფრ კოდს ზოგ ლიტერატურაში plaintext-ით მოიხსენიებენ, ზოგან cleartext-ით, ხოლო დაშიფრულს - cipertext ით). თუ თუ კრიპტოსისტემის დამშიფრავი e გასაღები ყოველთვის არის ტოლი გამშიფრავი d კოდისა ან თუ d ადვილად გამოითვლება e-სგან, მაში იტყვიან რომ კრიპტოგრაფიული სისტემა არის სიმეტრიული. თუ გიორგის და ანას შორის არის ურთიერთობა დასამყარებელი, თავდაპირველად ისინი გაცვლიან გასაღებებს, თუმცა გასაღებების გაცვლა დიდ პრობლემას წარმოადგენს, One Time Pad ში იყო პრობლემა და მსოფლიოში უძლიერესი ალგორითმიც ამოიღეს ხმარებიდან!

თუ კრიპტოგრაფიულ სისტემაში გამშიფრავი d და მშიფრავი e არიან განსხვავებულნი და შეუძლებელია d-ს გამოთვლა მათემატიკურად e-სგან. მაშინ ესეთი სისტემა არის ასიმეტრიული. ამ დროს გიორგის შეულია თავისი e „საჯარო გასაღებად“ აქციოს (public key). და თუ გიორგის მოუნდება ვინმესგან მიღოს წერილი, ის ჯერ გამოაქვეყნებს თავის გასაღებს, dს კი საიდუმლოდ შეინახავს თავისთვის. ყველას შეულია გმაოიყენოს e, მაგრამ d მხოლოდ ბობმა იცის და მხოლოდ მას ძალუძს ასეთი ტექსტის გაშიფვრა, ამ შემთხვევაში d ს უწოდებენ პირადულ გასაღებს (private key). ასიმეტრიულ და სიმეტრიულ კრიპტო სისტემებს ასევე საჯარო-გასაღების კრიპტო სისტემებსაც უწუდებენ (public-key Cryptosystems).



რაც შეეხება პარატკოლსა.

პროტოკოლი ეს არის წესები, მონაცემთა გადაცემისათვის, უფრო კი უსაფრთხოდ გადაცემისათვის. როდესაც ინფორმაციის მოპარვა დაიწყეს მაშინ ჯგუფმა IETF შექმნა ქვე განყოფილება, რომლის დანიშნულება იყო ქსელში ინფორმაციის დაცვა და საბოლოოდ, როგორც იქნა, შეიქმნა Secure HTTP. შემდგომ სხვადასხვა პრობლემების გამო კორპორაცია Netscape მა კრიპტოგრაფია სიმეტრიული ნაკადურიკოდირება ბლოკებითკოდირება ასიმეტრიული პროტოკოლი თითქმის IETF სთან ერთად თავისი უსაფრთხოების პროტოკოლი გამოუშვა SSL (Secure Sockets Layer). SSL მთავარი მიზანია ქსელში ან 2 კომპიუტერს შორის ინფორმაციის დაცვა, ამას ახდენს სერთიფიკატებისა და key ების საშუალებით. SSL პროტოკოლი რადგანაც GNU ს ლიცენზიით ვრცელდება და რადგან გნუ-ს პროგრამისტები ვალდებულნი იყვნენ და არიან თავიანთ პროგრამასთან ერთად კოდიც გაავრცელონ(Open Sources-ეს აღიარებენ), ამიტომ ამ დარგში მომუშავეთა 90%-ი, SSL-ს პრაქტიკულად დაცულად მიიჩნევს. ცნობისათვის SSL მუშაობს 443–ე პორტზე.



რაც შეეხება ECB mode-ს


user posted image


სურათზე ნაჩვენებია თუ როგორ იშიფრება 2 P ბიტი. P ასო ბგერა მოდის plaintext იდან იგივე cleartext. E ფუნქციის იშიფრება და D ფუნქციით მისი გაშიფვრა ხდება. ცნობისათვის , ზემოთ ნაჩვენებმა სქემამ, შეიძლება, უცბათ caesar cipher ანუ ცეზარის ალგორითმიც გაგვახსენოს. სადაც თითოეულ ასოს ემატებოდა რაღაც e, და ხდებოდა ასოების შეცვლა. ყველა ასო იცვლებოდა ერთი სახის key-თი. თუმცა Steram Cipher ში ვნახავთ, რომ , ცეზარის ალგორითმისგან გასნხვავებით, იქ ყველა ასო ბგერა, სხვადასხვა გასაღებით შეილება დაიშიფროს.


მაგალითად:

მაგალითად ვიყენებთ 33 სიმბოლიან ანბანს Σ={ა,ბ,გ,დ,ე,ვ,ზ,თ,ი,კ,ლ,მ,ნ,ო,პ,რ,ს,ტ,უ,ფ,ქ,ღ,ყ,შ,ჩ,ც,ძ,წ,ჭ,ხ,ჰ}. და გვინდა დავშიფროთ სიტყვა T=„მშვიდობა“ , სადაც ბლოკის სიგრძე b=4 ხოლო გასაღები k=(4,3,2,1). T=“მშვიდობა“ სიტყვა შედგება 8 სიმბლოსაგან, შესაბამისად დაიყოფა 8/2 ბლოკად. ვიყენებთ დამშიფრავ E(Ti) ფუნქციას. E ასოციაციაა Encrypt-ის.

T1=მშვი T2=დობა

თითოეული ბლოკი შედგება 4 ასო ბგერისაგან. რადგან გასაღები k=(4,3,2,1) ამიტომ პირველი სიმბოლო გადაინაცვლებს მეოთხეს ადგილას, მეორე სიმბოლო - მესამის ადგილას, მესამე სიმბოლო - მეორეს ადგილას, მეოთხე - პირველის ადგილას. შესაბამისად: E(T1)=ივშმ E(T2)=აბოდ. E(T1)+E(T2)=E(T)=ივშმაბოდ თუ ბლოკის სიგრძე იქნებოდა 8 ხოლო გასაღები 8,7,6,5,4,3,2,1 ტექსტი უბრალოდ შეტრიალდებოდა.


მაგალითი ორი (როდესაც სიგრძე მეტია)

გვაქვს ანბანი რომელიც შედგება 0-ისა და 1 ისგან Σ={0,1}. ვთქვათ ბლოკის სიგრძე b=5. გასაღები k=(5,1,3,2,4) ტექსტი T=111000111 გავუკეთოთ კოდირება დავყოთ ბლოკებად T1=11100 T2=0111 შევნიშნოთ რომ მეორე ბლოკის სიგრძე არის 4 და <b-ზე ==> რამენაირად უნდა გავხადოთ მისი სიგრძე 5 ის ტოლი, ამისათვის შეგვიძლია შემთხვევითი სიმბოლო მივუწეროთ მეორე ბლოკს მაგალითად 0 იანი. დაშიფვრის შემდგომ იქნება 0111000111 გამუქებული ნულიანი კი სწორედ ის ნულიანია , რომელიც ჩვენ ბოლოში დავამატეთ.

ჩემ ალგორითმში 0 ებით არ ვავსებ მარტო, სხვა ხერხი მოვიფიქრე:



CODE

if((PlainTexT.length)%n!=0)
{
  do{
 
    if(setX==0) { x="x";  setX=1; }
    else if(setX==1) { x="0";  setX=2; }
   else if(setX==2) { x="1"; setX=3; }
   else if(setX==3) { x="0"; setX=0; }
       
    PlainTexT=PlainTexT+x;
     
    }while(PlainTexT.length%n!=0);
}


ანუ ხან 0 ით შევავსებ ხან 1 ით ხანა "x" ით.


აპა რავარი იყო? smile.gif



საავტორო უფლებები დაცულია
smile.gif))

This post has been edited by VakhoQor on 15 Aug 2011, 12:34


--------------------
sudo atp-cache search Everything Interesting about Science of Computer Programming;
sudo apt-get learn Everything is Interesting;
Crypto
კატა უძაღლო ქვეყანაში


******
ჯგუფი: Members
წერილები: 8104
წევრი No.: 9780
რეგისტრ.: 3-May 05

გამოგზავნილია: 15 Sep 2011, 13:54  #27387000      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
VakhoQor
QUOTE
კვლევები კრიპტოგრაფიაში იწყება 1970-წლიდან,

აბა რას ამბობ ადამიანო smile.gif გადაბრუნდა საფლავში ალ-ქინდი და ეგაა, და მიყვა კიდე მრავალი biggrin.gif

QUOTE
ინსტიტუტში მიმავალ ავტობუსში ვფიქრობდი ამაზე და ჩემი ალგორითმი მივუწერე (უნივესიტეტამდე სანამ მივიდა ავტოვუსი მოვასწარი

QUOTE
აპა რავარი იყო?

კარგია ოღონდ ეგ ალგორითმი production-ში არ ჩაუშვა smile.gif

This post has been edited by Crypto on 15 Sep 2011, 14:00


--------------------
აიღე აგური!
VakhoQor
Super Member


****
ჯგუფი: Registered
წერილები: 470
წევრი No.: 121774
რეგისტრ.: 29-September 10

გამოგზავნილია: 29 Sep 2011, 00:41  #27595713      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
"აბა რას ამბობ ადამიანო" -


ბუჩმანის უნივერისტეტის ლექტორი, რომელიც ნასაში მუშაობს, ასე ამბობს, მე არა smile.gif





soggybottom
Newbie


*
ჯგუფი: Registered
წერილები: 5
წევრი No.: 151973
რეგისტრ.: 2-July 12

გამოგზავნილია: 5 Jul 2012, 16:33  #31989121      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
"კვლევები კრიპტოგრაფიაში იწყება 1970-წლიდან," აჰაჰაჰა :დ Read this

This post has been edited by soggybottom on 5 Jul 2012, 16:33
Snowman
|͇̿V͇̿I͇̿P͇̿|


*****
ჯგუფი: Members
წერილები: 4075
წევრი No.: 11866
რეგისტრ.: 29-July 05

გამოგზავნილია: 5 Jul 2012, 18:55  #31991318      · პროფილი · პირადი მიმოწერა · ჩატი
VakhoQor
კარგია როდესაც სწავლობ და იდეებით ხარ სეპყრობილი, მაგრამ ერთი, რომ ვინ რომელ უნივერსიტეტში რას ამბობს ეგ არ ვიცი, მაგრამ სწორად გიტხრეს მაგ დროს ნამდვილად არ დაწყებულა კრიპტოგრაფიის შესახებ კვლევები და მეორე, არ გინდა მართლა ნუ ჩაუშვებ ამას production-ში თუ რაიმეს დაწერ კარგი? სულ მცირეს ვიტყვი ჯავასკრიპტია ეს თუ თვალი არ მატყუებს და...

ისე კი ფიქრი და მსჟელობა ცუდი არასდროს არ არის წინ კიდევ ბევრი საინტერესო იდეები მოგივა უბრალოდ ცადე დაახარისხო და ღირებული იდეებზე იმუშაო ხოლმე wink.gif


--------------------
We loved with a love that was more than love.
------------------------------------------------------
Keep on the sunny side of the life.
1 წევრი ათვალიერებს ამ თემას (1 სტუმარი და 0 უჩინარი წევრი)
0 წევრი:
Topic Options გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

 



ფორუმის სერვერების განთავსებას და ინტერნეტთან კავშირს უზრუნველყოფს: CLOUD9
[ Script Execution time: 0.0200 ]   [ 12 queries used ]   [ GZIP Disabled ]