سیستم غیر متقارن (کلیدهای عمومی)

سیستم غیر متقارن کار رمزگذاری و هم کشف رمز رو از طریق کلیدهای عمومی و خصوصی که به هم ارتباط دارند انجام می دهند . برخلاف سیستم متقارن که اگر  یک بلاک داده رو با کلید خصوصی رمزگذاری می کرد و برای برگرداندن آنها حتما باید کلیدی خصوصی که قبلا تعریف شده بود رو به کار می برد ، اما در سیستم نا متقارن اگر شما برای رمزگذاشتن از کلید خصوصی استفاده کنید باید حتما از کلید عمومی  متناظر آن برای باز کردن آن استفاده کنید یا به عبارتی دیگر

(در اين رمز گذاري که اگر داده اي با يک کليد قفل شد ، با همان کليد باز نمي شود و فقط امکان باز شدن آن با کليد متناظر آن وجود دارد. اين کليد متناظر نزد طرف مقابل است و امکان بدست آوردن آن از کليد ديگر وجود ندارد.)

در ضمن یک نکته رو هم اینجا باید بگم و اینکه مفهوم از کلید (Key) یک ارایه از بایت ها است که با توجه به نوع کاربرد و نوع امنیت طول متفاوتی دارد . و مبنای آنها 16 است. سیستم نا متقارن براساس الگوریتم های پیچیده ریاضی کارمیکند ، و ما نمی توانیم برای داده های حجیم از این الگوریتم استفاده کنیم .

 از این الگوریتم برای اعتبارسنجی و یا اطلاعات خیلی محرمانه استفاده می توانیم بهره ببریم . یکی از مهمترین الگوریتم های غیر متقارن RSA است که برای درک آن باید از درک عالی ریاضی برخوردار باشید.

الگوریتم را مشاهده کنید :

 

 

//Generating Public-Private Keys

Select p,q that p and q are two different large prime numbers

Let n=p*q

Let m=(p-1)*(q-1)

Select e that 1

Calculate d such that (d*e)mod(m) = 1

 

Public Key: {e,n}

Private Key:{d,n}

 

//Encryption

PlainText : M   (M

CipherText: C = Me Mod(n)

 

//Decryption

CipherText : C

PlainText  : M = Cd Mod(n)                 

 

 

 

 

واین هم از کد سی شارپ :

 

private void GenerateKeyPairs()

        {                       

            //Each time this constructor is called,

            //a different public-private key pair is generated.

            rsaCipher = new RSACryptoServiceProvider();

 

            //retrieve public parameters

            textBoxPublicKey.Text = rsaCipher.ToXmlString(false);

 

            //retrieve private parameters

            textBoxPrivateKey.Text = rsaCipher.ToXmlString(true);           

        }

 

 

 

 

private void buttonEncrypt_Click(object sender, EventArgs e)

        {

            rsaCipher = new RSACryptoServiceProvider();

 

            string publicKey = textBoxPublicKey.Text;           

            rsaCipher.FromXmlString(publicKey);

 

            string plainText = textBoxPlain.Text;

            byte[] plainBytes = Encoding.ASCII.GetBytes(plainText);

 

            byte[] cipheredBytes = rsaCipher.Encrypt(plainBytes, true);

            string cipheredText = Convert.ToBase64String(cipheredBytes);

 

            textBoxCiphered.Text = cipheredText;

        }


به دلیل حجم زیاد این مطلب نشد در یک پست بزارم به پست بعدی برای ادامه مراجعه کنید .