RSA Algoritması Nedir, Nasıl Çalışır ? (Python Örnekli)

KaptanTR

Admin
17 Nis 2015
1,649
1,581
eenah9k.jpg


RSA Algoritması Nedir ?

RSA algoritması (Rivest-Shamir-Adleman), ortak anahtar şifrelemesine izin veren ve özellikle internet gibi güvenli olmayan bir ağ üzerinden teslim edildiğinde hassas verilerin güvenliğini sağlamak için sıklıkla kullanılan bir şifreleme sisteminin temelidir. 1973'te İngiliz matematikçi Clifford Cocks tarafından bir açık anahtar algoritmasının keşfi, 1997 yılına kadar Birleşik Krallık'ın GCHQ'su tarafından gizli tutulmuş olsa da, Massachusetts Teknoloji Enstitüsü'nden Ron Rivest, Adi Shamir ve Leonard Adleman, RSA'yı ilk kez 1977'de halka açıkladı.


hwlipvf.png



Genellikle açık anahtarlı şifreleme olarak bilinen asimetrik şifreleme, matematiksel olarak birbirine bağlı bir genel ve bir özel olmak üzere iki anahtar kullanır. Genel anahtar herkesle paylaşılabilir, ancak özel anahtar gizli kalmalıdır.


hwlipvf.png



Hem genel hem de özel anahtarlar, RSA şifrelemesinde bir mesajı şifreleyebilir. Şifre çözme anahtarı, iletişimi şifrelemek için kullanılanın tam tersidir. Bu özellik, RSA'nın en yaygın olarak kullanılan asimetrik algoritma olmasının nedenlerinden biridir: elektronik iletişim ve veri depolamanın gizliliğini, bütünlüğünü, özgünlüğünü ve reddedilmemesini sağlar.


hwlipvf.png



RSA, Secure Shell (SSH), OpenPGP, S/MIME ve SSL/TLS dahil olmak üzere çeşitli protokollerde şifreleme ve dijital imza yetenekleri için kullanılır. Ayrıca, internet gibi güvenli olmayan bir ağ üzerinden güvenli bir bağlantı kurması veya bir dijital imzanın kimliğini doğrulaması gereken tarayıcılar gibi yazılımlarda da kullanılır.

Ağa bağlı sistemlerde en yaygın faaliyetlerden biri RSA imza doğrulamasıdır.


hwlipvf.png



spk4w7x.jpg



RSA Algoritması Neden Kullanılır ?


İki büyük asal sayının çarpımı olan büyük tam sayıları çarpanlarına ayırmanın zorluğu RSA'nın güvenliğinin kaynağıdır. Günümüzün süper bilgisayarlarında bile, bu iki tamsayıyı çarpmak basittir, ancak orijinal asal sayıları toplamdan hesaplamak - veya çarpanlara ayırmak - alacağı zaman nedeniyle mümkün değildir.

hwlipvf.png


RSA kriptografisinin en zor bileşeni, genel ve özel anahtarlar üretme algoritmasıdır. Rabin-Miller asallık testi prosedürü, p ve q olmak üzere iki büyük asal sayı oluşturmak için kullanılır. p ve q'nun çarpılmasıyla bir modül, n, elde edilir. Bu numara, genel ve özel anahtarlar tarafından paylaşılır ve her ikisi arasında bir bağlantı görevi görür. Anahtar uzunluğu, genellikle bit olarak verilen anahtarın uzunluğudur.

hwlipvf.png


Genel anahtar, n modülünden ve küçük bir asal tamsayı olduğu için genellikle 65537'ye ayarlanan bir genel üste, e'den oluşur. Açık anahtar herkes tarafından paylaşıldığından, e rakamının gizlice seçilmiş bir asal sayı olması gerekmez.



hwlipvf.png


Özel anahtar, n modülünden ve çarpımsal tersini bulmak için Genişletilmiş Öklid yönteminin n'nin totientine uygulanmasıyla bulunan özel üs d'den oluşur.


hwlipvf.png



okv5zo5.jpg


RSA Algoritması Nasıl Çalışır ?

Meltem, RSA anahtarları için iki asal sayı seçer: p=11 ve q=13. n=pq=143 modüldür. n (n)=(p1)x(q1)=120 totient'tir. RSA genel anahtarı e için 7'yi seçer ve 103 veren RSA özel anahtarını hesaplamak için Genişletilmiş Öklid tekniğini kullanır.

hwlipvf.png


Serdar Meltem'e şifreli bir mesaj göndermek ister, (M), bu durumda RSA açık anahtarını (n, e) alır, bu durumda (143, 7). Düz metin mesajı sadece 9 sayısıdır ve şifreli metin C ile şu şekilde kodlanmıştır:


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C


hwlipvf.png


Meltem, Serdar'ın iletişimini aldığında, RSA özel anahtarını (d, n) aşağıdaki şekilde çözmek için kullanır:


Şifre çözmek için Cd mod n = 48103 ile başlar ve mod 143 = 9 = M


hwlipvf.png


Meltem'in bir hash (Serdar'a gönderdiği mesajın bir mesaj özeti) oluşturması, hash değerini kendi RSA özel anahtarıyla şifrelemesi ve bir mesajı dijital olarak imzalamak için RSA anahtarlarını kullanmak için anahtarı mesaja eklemesi gerekir. Serdar daha sonra, iletişimin kendisi tarafından gönderildiğini ve değiştirilmediğini doğrulamak için Meltem'in açık anahtarıyla karma değerinin şifresini çözebilir. Bu değer orijinal mesajın hash değeriyle eşleşiyorsa, mesaj yalnızca Meltem tarafından gönderilmiştir (kimlik doğrulama) ve tam olarak onun yazdığı gibidir (bütünlük).

hwlipvf.png


Elbette Meltem, Serdar'ın RSA açık anahtarıyla olan iletişimini Serdar'a iletmeden önce şifreleyerek gizliliği garanti altına alabilir. Dijital sertifika, sertifikanın sahibini tanımlayan bilgilerin yanı sıra, sahibinin ortak anahtarını da içerir. Sertifikalar, onları veren sertifika yetkilisi tarafından imzalanır ve genel anahtarların alınmasını ve sahibin onaylanmasını çok daha kolay hale getirebilirler.


gk3ov22.jpg


RSA Algoritması Python Örnek

Python:
import math
import base64


class AsimetrikSifreleme:
 
    def __init__(self):

        p = int(input('p için asal sayı gir: '))
        q = int(input('q için asal sayı gir: '))

        if not self.asalKontrol(p) or not self.asalKontrol(q):
            print('Lütfen asal giriniz')
            exit(-1)

        n = p * q

        r = (p - 1)*(q - 1)

        for i in range(1,1000):
            if(self.ortakBolen(i,r)==1):
                e=i

        d = self.carpimsalTers(e, r)
        public = (e, n)
        private = (d, n)

        print('1 - ) Şifrele\n2 - ) Çöz\n ')

        islem = input("İslem Seciniz: ")

        if islem == '1':
            data = input('Veri: ')
            e_data = self.sifrele(public, data)
            print(e_data)
            print(base64.b64encode(e_data.encode()).decode())

        elif islem == '2':
            data = base64.b64decode(input('Veri: ').encode()).decode()
            d_data = self.sifreCoz(private, data)
            print(d_data)
     
        else:
            print("Hatalı işlem")

    def asalKontrol(self,sayi):
        if sayi == 2:
            return True

        if sayi < 2:
            return False

        for i in range(2, int(math.sqrt(sayi)) + 1):
            if sayi%i == 0:
                return False

        return True

    def ortakBolen(self,e,r):
        while(r!=0):
            e,r=r,e%r
        return e

    def oklid(self,x, y):
        if x%y == 0:
            return(y, 0, 1)
        else:
            b, s, t = self.oklid(y, x%y)
            s = s - ((x//y)*t)
            return(b, t, s)

    def carpimsalTers(self,x, y):
        a, b, _ = self.oklid(x, y)
        if(a != 1):
            return None

        return b%y

    def sifrele(self,key, data):
        e, n = key
        x = []
        m = 0
        for i in data:
            if(i.isupper()):
                m = ord(i)-65
                c=(m**e)%n
                x.append(str(c))
            elif(i.islower()):
                m= ord(i)-97
                c=(m**e)%n
                x.append(str(c))
            elif(i.isspace()):
                spc=400
                x.append(str(400))
        return ','.join(x)

    def sifreCoz(self,priv_key,c_text):
        d,n=priv_key
        txt=c_text.split(',')
        x=''
        m=0
        for i in txt:
            if(i=='400'):
                x+=' '
            else:
                m=(int(i)**d)%n
                m+=65
                c=chr(m)
                x+=c
        return x

if __name__ == '__main__':
    Uygulama = AsimetrikSifreleme()


 
Son düzenleme:

trombolol33001

Katılımcı Üye
19 Kas 2021
420
142
18
eenah9k.jpg


RSA Algoritması Nedir ?

RSA algoritması (Rivest-Shamir-Adleman), ortak anahtar şifrelemesine izin veren ve özellikle internet gibi güvenli olmayan bir ağ üzerinden teslim edildiğinde hassas verilerin güvenliğini sağlamak için sıklıkla kullanılan bir şifreleme sisteminin temelidir. 1973'te İngiliz matematikçi Clifford Cocks tarafından bir açık anahtar algoritmasının keşfi, 1997 yılına kadar Birleşik Krallık'ın GCHQ'su tarafından gizli tutulmuş olsa da, Massachusetts Teknoloji Enstitüsü'nden Ron Rivest, Adi Shamir ve Leonard Adleman, RSA'yı ilk kez 1977'de halka açıkladı.


hwlipvf.png



Genellikle açık anahtarlı şifreleme olarak bilinen asimetrik şifreleme, matematiksel olarak birbirine bağlı bir genel ve bir özel olmak üzere iki anahtar kullanır. Genel anahtar herkesle paylaşılabilir, ancak özel anahtar gizli kalmalıdır.


hwlipvf.png



Hem genel hem de özel anahtarlar, RSA şifrelemesinde bir mesajı şifreleyebilir. Şifre çözme anahtarı, iletişimi şifrelemek için kullanılanın tam tersidir. Bu özellik, RSA'nın en yaygın olarak kullanılan asimetrik algoritma olmasının nedenlerinden biridir: elektronik iletişim ve veri depolamanın gizliliğini, bütünlüğünü, özgünlüğünü ve reddedilmemesini sağlar.


hwlipvf.png



RSA, Secure Shell (SSH), OpenPGP, S/MIME ve SSL/TLS dahil olmak üzere çeşitli protokollerde şifreleme ve dijital imza yetenekleri için kullanılır. Ayrıca, internet gibi güvenli olmayan bir ağ üzerinden güvenli bir bağlantı kurması veya bir dijital imzanın kimliğini doğrulaması gereken tarayıcılar gibi yazılımlarda da kullanılır.

Ağa bağlı sistemlerde en yaygın faaliyetlerden biri RSA imza doğrulamasıdır.


hwlipvf.png



spk4w7x.jpg



RSA Algoritması Neden Kullanılır ?


İki büyük asal sayının çarpımı olan büyük tam sayıları çarpanlarına ayırmanın zorluğu RSA'nın güvenliğinin kaynağıdır. Günümüzün süper bilgisayarlarında bile, bu iki tamsayıyı çarpmak basittir, ancak orijinal asal sayıları toplamdan hesaplamak - veya çarpanlara ayırmak - alacağı zaman nedeniyle mümkün değildir.

hwlipvf.png


RSA kriptografisinin en zor bileşeni, genel ve özel anahtarlar üretme algoritmasıdır. Rabin-Miller asallık testi prosedürü, p ve q olmak üzere iki büyük asal sayı oluşturmak için kullanılır. p ve q'nun çarpılmasıyla bir modül, n, elde edilir. Bu numara, genel ve özel anahtarlar tarafından paylaşılır ve her ikisi arasında bir bağlantı görevi görür. Anahtar uzunluğu, genellikle bit olarak verilen anahtarın uzunluğudur.

hwlipvf.png


Genel anahtar, n modülünden ve küçük bir asal tamsayı olduğu için genellikle 65537'ye ayarlanan bir genel üste, e'den oluşur. Açık anahtar herkes tarafından paylaşıldığından, e rakamının gizlice seçilmiş bir asal sayı olması gerekmez.



hwlipvf.png


Özel anahtar, n modülünden ve çarpımsal tersini bulmak için Genişletilmiş Öklid yönteminin n'nin totientine uygulanmasıyla bulunan özel üs d'den oluşur.


hwlipvf.png



okv5zo5.jpg


RSA Algoritması Nasıl Çalışır ?

Meltem, RSA anahtarları için iki asal sayı seçer: p=11 ve q=13. n=pq=143 modüldür. n (n)=(p1)x(q1)=120 totient'tir. RSA genel anahtarı e için 7'yi seçer ve 103 veren RSA özel anahtarını hesaplamak için Genişletilmiş Öklid tekniğini kullanır.

hwlipvf.png


Serdar Meltem'e şifreli bir mesaj göndermek ister, (M), bu durumda RSA açık anahtarını (n, e) alır, bu durumda (143, 7). Düz metin mesajı sadece 9 sayısıdır ve şifreli metin C ile şu şekilde kodlanmıştır:


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C


hwlipvf.png


Meltem, Serdar'ın iletişimini aldığında, RSA özel anahtarını (d, n) aşağıdaki şekilde çözmek için kullanır:


Şifre çözmek için Cd mod n = 48103 ile başlar ve mod 143 = 9 = M


hwlipvf.png


Meltem'in bir hash (Serdar'a gönderdiği mesajın bir mesaj özeti) oluşturması, hash değerini kendi RSA özel anahtarıyla şifrelemesi ve bir mesajı dijital olarak imzalamak için RSA anahtarlarını kullanmak için anahtarı mesaja eklemesi gerekir. Serdar daha sonra, iletişimin kendisi tarafından gönderildiğini ve değiştirilmediğini doğrulamak için Meltem'in açık anahtarıyla karma değerinin şifresini çözebilir. Bu değer orijinal mesajın hash değeriyle eşleşiyorsa, mesaj yalnızca Meltem tarafından gönderilmiştir (kimlik doğrulama) ve tam olarak onun yazdığı gibidir (bütünlük).

hwlipvf.png


Elbette Meltem, Serdar'ın RSA açık anahtarıyla olan iletişimini Serdar'a iletmeden önce şifreleyerek gizliliği garanti altına alabilir. Dijital sertifika, sertifikanın sahibini tanımlayan bilgilerin yanı sıra, sahibinin ortak anahtarını da içerir. Sertifikalar, onları veren sertifika yetkilisi tarafından imzalanır ve genel anahtarların alınmasını ve sahibin onaylanmasını çok daha kolay hale getirebilirler.


gk3ov22.jpg


RSA Algoritması Python Örnek

Python:
import math
import base64


class AsimetrikSifreleme:

    def __init__(self):

        p = int(input('p için asal sayı gir: '))
        q = int(input('q için asal sayı gir: '))

        if not self.asalKontrol(p) or not self.asalKontrol(q):
            print('Lütfen asal giriniz')
            exit(-1)

        n = p * q

        r = (p - 1)*(q - 1)

        for i in range(1,1000):
            if(self.ortakBolen(i,r)==1):
                e=i

        d = self.carpimsalTers(e, r)
        public = (e, n)
        private = (d, n)

        print('1 - ) Şifrele\n2 - ) Çöz\n ')

        islem = input("İslem Seciniz: ")

        if islem == '1':
            data = input('Veri: ')
            e_data = self.sifrele(public, data)
            print(e_data)
            print(base64.b64encode(e_data.encode()).decode())

        elif islem == '2':
            data = base64.b64decode(input('Veri: ').encode()).decode()
            d_data = self.sifreCoz(private, data)
            print(d_data)
    
        else:
            print("Hatalı işlem")

    def asalKontrol(self,sayi):
        if sayi == 2:
            return True

        if sayi < 2:
            return False

        for i in range(2, int(math.sqrt(sayi)) + 1):
            if sayi%i == 0:
                return False

        return True

    def ortakBolen(self,e,r):
        while(r!=0):
            e,r=r,e%r
        return e

    def oklid(self,x, y):
        if x%y == 0:
            return(y, 0, 1)
        else:
            b, s, t = self.oklid(y, x%y)
            s = s - ((x//y)*t)
            return(b, t, s)

    def carpimsalTers(self,x, y):
        a, b, _ = self.oklid(x, y)
        if(a != 1):
            return None

        return b%y

    def sifrele(self,key, data):
        e, n = key
        x = []
        m = 0
        for i in data:
            if(i.isupper()):
                m = ord(i)-65
                c=(m**e)%n
                x.append(str(c))
            elif(i.islower()):
                m= ord(i)-97
                c=(m**e)%n
                x.append(str(c))
            elif(i.isspace()):
                spc=400
                x.append(str(400))
        return ','.join(x)

    def sifreCoz(self,priv_key,c_text):
        d,n=priv_key
        txt=c_text.split(',')
        x=''
        m=0
        for i in txt:
            if(i=='400'):
                x+=' '
            else:
                m=(int(i)**d)%n
                m+=65
                c=chr(m)
                x+=c
        return x

if __name__ == '__main__':
    Uygulama = AsimetrikSifreleme()


elinize sağlık sağlam içerik.
 

Adanalıtrojan

Kıdemli Üye
25 Haz 2021
2,018
1,051
16
Konya Ovası Askeri Tesislerinde
eenah9k.jpg


RSA Algoritması Nedir ?

RSA algoritması (Rivest-Shamir-Adleman), ortak anahtar şifrelemesine izin veren ve özellikle internet gibi güvenli olmayan bir ağ üzerinden teslim edildiğinde hassas verilerin güvenliğini sağlamak için sıklıkla kullanılan bir şifreleme sisteminin temelidir. 1973'te İngiliz matematikçi Clifford Cocks tarafından bir açık anahtar algoritmasının keşfi, 1997 yılına kadar Birleşik Krallık'ın GCHQ'su tarafından gizli tutulmuş olsa da, Massachusetts Teknoloji Enstitüsü'nden Ron Rivest, Adi Shamir ve Leonard Adleman, RSA'yı ilk kez 1977'de halka açıkladı.


hwlipvf.png



Genellikle açık anahtarlı şifreleme olarak bilinen asimetrik şifreleme, matematiksel olarak birbirine bağlı bir genel ve bir özel olmak üzere iki anahtar kullanır. Genel anahtar herkesle paylaşılabilir, ancak özel anahtar gizli kalmalıdır.


hwlipvf.png



Hem genel hem de özel anahtarlar, RSA şifrelemesinde bir mesajı şifreleyebilir. Şifre çözme anahtarı, iletişimi şifrelemek için kullanılanın tam tersidir. Bu özellik, RSA'nın en yaygın olarak kullanılan asimetrik algoritma olmasının nedenlerinden biridir: elektronik iletişim ve veri depolamanın gizliliğini, bütünlüğünü, özgünlüğünü ve reddedilmemesini sağlar.


hwlipvf.png



RSA, Secure Shell (SSH), OpenPGP, S/MIME ve SSL/TLS dahil olmak üzere çeşitli protokollerde şifreleme ve dijital imza yetenekleri için kullanılır. Ayrıca, internet gibi güvenli olmayan bir ağ üzerinden güvenli bir bağlantı kurması veya bir dijital imzanın kimliğini doğrulaması gereken tarayıcılar gibi yazılımlarda da kullanılır.

Ağa bağlı sistemlerde en yaygın faaliyetlerden biri RSA imza doğrulamasıdır.


hwlipvf.png



spk4w7x.jpg



RSA Algoritması Neden Kullanılır ?


İki büyük asal sayının çarpımı olan büyük tam sayıları çarpanlarına ayırmanın zorluğu RSA'nın güvenliğinin kaynağıdır. Günümüzün süper bilgisayarlarında bile, bu iki tamsayıyı çarpmak basittir, ancak orijinal asal sayıları toplamdan hesaplamak - veya çarpanlara ayırmak - alacağı zaman nedeniyle mümkün değildir.

hwlipvf.png


RSA kriptografisinin en zor bileşeni, genel ve özel anahtarlar üretme algoritmasıdır. Rabin-Miller asallık testi prosedürü, p ve q olmak üzere iki büyük asal sayı oluşturmak için kullanılır. p ve q'nun çarpılmasıyla bir modül, n, elde edilir. Bu numara, genel ve özel anahtarlar tarafından paylaşılır ve her ikisi arasında bir bağlantı görevi görür. Anahtar uzunluğu, genellikle bit olarak verilen anahtarın uzunluğudur.

hwlipvf.png


Genel anahtar, n modülünden ve küçük bir asal tamsayı olduğu için genellikle 65537'ye ayarlanan bir genel üste, e'den oluşur. Açık anahtar herkes tarafından paylaşıldığından, e rakamının gizlice seçilmiş bir asal sayı olması gerekmez.



hwlipvf.png


Özel anahtar, n modülünden ve çarpımsal tersini bulmak için Genişletilmiş Öklid yönteminin n'nin totientine uygulanmasıyla bulunan özel üs d'den oluşur.


hwlipvf.png



okv5zo5.jpg


RSA Algoritması Nasıl Çalışır ?

Meltem, RSA anahtarları için iki asal sayı seçer: p=11 ve q=13. n=pq=143 modüldür. n (n)=(p1)x(q1)=120 totient'tir. RSA genel anahtarı e için 7'yi seçer ve 103 veren RSA özel anahtarını hesaplamak için Genişletilmiş Öklid tekniğini kullanır.

hwlipvf.png


Serdar Meltem'e şifreli bir mesaj göndermek ister, (M), bu durumda RSA açık anahtarını (n, e) alır, bu durumda (143, 7). Düz metin mesajı sadece 9 sayısıdır ve şifreli metin C ile şu şekilde kodlanmıştır:


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C


hwlipvf.png


Meltem, Serdar'ın iletişimini aldığında, RSA özel anahtarını (d, n) aşağıdaki şekilde çözmek için kullanır:


Şifre çözmek için Cd mod n = 48103 ile başlar ve mod 143 = 9 = M


hwlipvf.png


Meltem'in bir hash (Serdar'a gönderdiği mesajın bir mesaj özeti) oluşturması, hash değerini kendi RSA özel anahtarıyla şifrelemesi ve bir mesajı dijital olarak imzalamak için RSA anahtarlarını kullanmak için anahtarı mesaja eklemesi gerekir. Serdar daha sonra, iletişimin kendisi tarafından gönderildiğini ve değiştirilmediğini doğrulamak için Meltem'in açık anahtarıyla karma değerinin şifresini çözebilir. Bu değer orijinal mesajın hash değeriyle eşleşiyorsa, mesaj yalnızca Meltem tarafından gönderilmiştir (kimlik doğrulama) ve tam olarak onun yazdığı gibidir (bütünlük).

hwlipvf.png


Elbette Meltem, Serdar'ın RSA açık anahtarıyla olan iletişimini Serdar'a iletmeden önce şifreleyerek gizliliği garanti altına alabilir. Dijital sertifika, sertifikanın sahibini tanımlayan bilgilerin yanı sıra, sahibinin ortak anahtarını da içerir. Sertifikalar, onları veren sertifika yetkilisi tarafından imzalanır ve genel anahtarların alınmasını ve sahibin onaylanmasını çok daha kolay hale getirebilirler.


gk3ov22.jpg


RSA Algoritması Python Örnek

Python:
import math
import base64


class AsimetrikSifreleme:

    def __init__(self):

        p = int(input('p için asal sayı gir: '))
        q = int(input('q için asal sayı gir: '))

        if not self.asalKontrol(p) or not self.asalKontrol(q):
            print('Lütfen asal giriniz')
            exit(-1)

        n = p * q

        r = (p - 1)*(q - 1)

        for i in range(1,1000):
            if(self.ortakBolen(i,r)==1):
                e=i

        d = self.carpimsalTers(e, r)
        public = (e, n)
        private = (d, n)

        print('1 - ) Şifrele\n2 - ) Çöz\n ')

        islem = input("İslem Seciniz: ")

        if islem == '1':
            data = input('Veri: ')
            e_data = self.sifrele(public, data)
            print(e_data)
            print(base64.b64encode(e_data.encode()).decode())

        elif islem == '2':
            data = base64.b64decode(input('Veri: ').encode()).decode()
            d_data = self.sifreCoz(private, data)
            print(d_data)
    
        else:
            print("Hatalı işlem")

    def asalKontrol(self,sayi):
        if sayi == 2:
            return True

        if sayi < 2:
            return False

        for i in range(2, int(math.sqrt(sayi)) + 1):
            if sayi%i == 0:
                return False

        return True

    def ortakBolen(self,e,r):
        while(r!=0):
            e,r=r,e%r
        return e

    def oklid(self,x, y):
        if x%y == 0:
            return(y, 0, 1)
        else:
            b, s, t = self.oklid(y, x%y)
            s = s - ((x//y)*t)
            return(b, t, s)

    def carpimsalTers(self,x, y):
        a, b, _ = self.oklid(x, y)
        if(a != 1):
            return None

        return b%y

    def sifrele(self,key, data):
        e, n = key
        x = []
        m = 0
        for i in data:
            if(i.isupper()):
                m = ord(i)-65
                c=(m**e)%n
                x.append(str(c))
            elif(i.islower()):
                m= ord(i)-97
                c=(m**e)%n
                x.append(str(c))
            elif(i.isspace()):
                spc=400
                x.append(str(400))
        return ','.join(x)

    def sifreCoz(self,priv_key,c_text):
        d,n=priv_key
        txt=c_text.split(',')
        x=''
        m=0
        for i in txt:
            if(i=='400'):
                x+=' '
            else:
                m=(int(i)**d)%n
                m+=65
                c=chr(m)
                x+=c
        return x

if __name__ == '__main__':
    Uygulama = AsimetrikSifreleme()


Güzel konu olmuş hocam elinize sağlık :)
 

trombolol33001

Katılımcı Üye
19 Kas 2021
420
142
18
eenah9k.jpg


RSA Algoritması Nedir ?

RSA algoritması (Rivest-Shamir-Adleman), ortak anahtar şifrelemesine izin veren ve özellikle internet gibi güvenli olmayan bir ağ üzerinden teslim edildiğinde hassas verilerin güvenliğini sağlamak için sıklıkla kullanılan bir şifreleme sisteminin temelidir. 1973'te İngiliz matematikçi Clifford Cocks tarafından bir açık anahtar algoritmasının keşfi, 1997 yılına kadar Birleşik Krallık'ın GCHQ'su tarafından gizli tutulmuş olsa da, Massachusetts Teknoloji Enstitüsü'nden Ron Rivest, Adi Shamir ve Leonard Adleman, RSA'yı ilk kez 1977'de halka açıkladı.


hwlipvf.png



Genellikle açık anahtarlı şifreleme olarak bilinen asimetrik şifreleme, matematiksel olarak birbirine bağlı bir genel ve bir özel olmak üzere iki anahtar kullanır. Genel anahtar herkesle paylaşılabilir, ancak özel anahtar gizli kalmalıdır.


hwlipvf.png



Hem genel hem de özel anahtarlar, RSA şifrelemesinde bir mesajı şifreleyebilir. Şifre çözme anahtarı, iletişimi şifrelemek için kullanılanın tam tersidir. Bu özellik, RSA'nın en yaygın olarak kullanılan asimetrik algoritma olmasının nedenlerinden biridir: elektronik iletişim ve veri depolamanın gizliliğini, bütünlüğünü, özgünlüğünü ve reddedilmemesini sağlar.


hwlipvf.png



RSA, Secure Shell (SSH), OpenPGP, S/MIME ve SSL/TLS dahil olmak üzere çeşitli protokollerde şifreleme ve dijital imza yetenekleri için kullanılır. Ayrıca, internet gibi güvenli olmayan bir ağ üzerinden güvenli bir bağlantı kurması veya bir dijital imzanın kimliğini doğrulaması gereken tarayıcılar gibi yazılımlarda da kullanılır.

Ağa bağlı sistemlerde en yaygın faaliyetlerden biri RSA imza doğrulamasıdır.


hwlipvf.png



spk4w7x.jpg



RSA Algoritması Neden Kullanılır ?


İki büyük asal sayının çarpımı olan büyük tam sayıları çarpanlarına ayırmanın zorluğu RSA'nın güvenliğinin kaynağıdır. Günümüzün süper bilgisayarlarında bile, bu iki tamsayıyı çarpmak basittir, ancak orijinal asal sayıları toplamdan hesaplamak - veya çarpanlara ayırmak - alacağı zaman nedeniyle mümkün değildir.

hwlipvf.png


RSA kriptografisinin en zor bileşeni, genel ve özel anahtarlar üretme algoritmasıdır. Rabin-Miller asallık testi prosedürü, p ve q olmak üzere iki büyük asal sayı oluşturmak için kullanılır. p ve q'nun çarpılmasıyla bir modül, n, elde edilir. Bu numara, genel ve özel anahtarlar tarafından paylaşılır ve her ikisi arasında bir bağlantı görevi görür. Anahtar uzunluğu, genellikle bit olarak verilen anahtarın uzunluğudur.

hwlipvf.png


Genel anahtar, n modülünden ve küçük bir asal tamsayı olduğu için genellikle 65537'ye ayarlanan bir genel üste, e'den oluşur. Açık anahtar herkes tarafından paylaşıldığından, e rakamının gizlice seçilmiş bir asal sayı olması gerekmez.



hwlipvf.png


Özel anahtar, n modülünden ve çarpımsal tersini bulmak için Genişletilmiş Öklid yönteminin n'nin totientine uygulanmasıyla bulunan özel üs d'den oluşur.


hwlipvf.png



okv5zo5.jpg


RSA Algoritması Nasıl Çalışır ?

Meltem, RSA anahtarları için iki asal sayı seçer: p=11 ve q=13. n=pq=143 modüldür. n (n)=(p1)x(q1)=120 totient'tir. RSA genel anahtarı e için 7'yi seçer ve 103 veren RSA özel anahtarını hesaplamak için Genişletilmiş Öklid tekniğini kullanır.

hwlipvf.png


Serdar Meltem'e şifreli bir mesaj göndermek ister, (M), bu durumda RSA açık anahtarını (n, e) alır, bu durumda (143, 7). Düz metin mesajı sadece 9 sayısıdır ve şifreli metin C ile şu şekilde kodlanmıştır:


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C


hwlipvf.png


Meltem, Serdar'ın iletişimini aldığında, RSA özel anahtarını (d, n) aşağıdaki şekilde çözmek için kullanır:


Şifre çözmek için Cd mod n = 48103 ile başlar ve mod 143 = 9 = M


hwlipvf.png


Meltem'in bir hash (Serdar'a gönderdiği mesajın bir mesaj özeti) oluşturması, hash değerini kendi RSA özel anahtarıyla şifrelemesi ve bir mesajı dijital olarak imzalamak için RSA anahtarlarını kullanmak için anahtarı mesaja eklemesi gerekir. Serdar daha sonra, iletişimin kendisi tarafından gönderildiğini ve değiştirilmediğini doğrulamak için Meltem'in açık anahtarıyla karma değerinin şifresini çözebilir. Bu değer orijinal mesajın hash değeriyle eşleşiyorsa, mesaj yalnızca Meltem tarafından gönderilmiştir (kimlik doğrulama) ve tam olarak onun yazdığı gibidir (bütünlük).

hwlipvf.png


Elbette Meltem, Serdar'ın RSA açık anahtarıyla olan iletişimini Serdar'a iletmeden önce şifreleyerek gizliliği garanti altına alabilir. Dijital sertifika, sertifikanın sahibini tanımlayan bilgilerin yanı sıra, sahibinin ortak anahtarını da içerir. Sertifikalar, onları veren sertifika yetkilisi tarafından imzalanır ve genel anahtarların alınmasını ve sahibin onaylanmasını çok daha kolay hale getirebilirler.


gk3ov22.jpg


RSA Algoritması Python Örnek

Python:
import math
import base64


class AsimetrikSifreleme:

    def __init__(self):

        p = int(input('p için asal sayı gir: '))
        q = int(input('q için asal sayı gir: '))

        if not self.asalKontrol(p) or not self.asalKontrol(q):
            print('Lütfen asal giriniz')
            exit(-1)

        n = p * q

        r = (p - 1)*(q - 1)

        for i in range(1,1000):
            if(self.ortakBolen(i,r)==1):
                e=i

        d = self.carpimsalTers(e, r)
        public = (e, n)
        private = (d, n)

        print('1 - ) Şifrele\n2 - ) Çöz\n ')

        islem = input("İslem Seciniz: ")

        if islem == '1':
            data = input('Veri: ')
            e_data = self.sifrele(public, data)
            print(e_data)
            print(base64.b64encode(e_data.encode()).decode())

        elif islem == '2':
            data = base64.b64decode(input('Veri: ').encode()).decode()
            d_data = self.sifreCoz(private, data)
            print(d_data)
    
        else:
            print("Hatalı işlem")

    def asalKontrol(self,sayi):
        if sayi == 2:
            return True

        if sayi < 2:
            return False

        for i in range(2, int(math.sqrt(sayi)) + 1):
            if sayi%i == 0:
                return False

        return True

    def ortakBolen(self,e,r):
        while(r!=0):
            e,r=r,e%r
        return e

    def oklid(self,x, y):
        if x%y == 0:
            return(y, 0, 1)
        else:
            b, s, t = self.oklid(y, x%y)
            s = s - ((x//y)*t)
            return(b, t, s)

    def carpimsalTers(self,x, y):
        a, b, _ = self.oklid(x, y)
        if(a != 1):
            return None

        return b%y

    def sifrele(self,key, data):
        e, n = key
        x = []
        m = 0
        for i in data:
            if(i.isupper()):
                m = ord(i)-65
                c=(m**e)%n
                x.append(str(c))
            elif(i.islower()):
                m= ord(i)-97
                c=(m**e)%n
                x.append(str(c))
            elif(i.isspace()):
                spc=400
                x.append(str(400))
        return ','.join(x)

    def sifreCoz(self,priv_key,c_text):
        d,n=priv_key
        txt=c_text.split(',')
        x=''
        m=0
        for i in txt:
            if(i=='400'):
                x+=' '
            else:
                m=(int(i)**d)%n
                m+=65
                c=chr(m)
                x+=c
        return x

if __name__ == '__main__':
    Uygulama = AsimetrikSifreleme()


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C ;;; Me mod n = 97 ifadesinde ne anlatılıyor ?
 

Mertoktay5

Üye
5 Ara 2021
227
95
eenah9k.jpg


RSA Algoritması Nedir ?

RSA algoritması (Rivest-Shamir-Adleman), ortak anahtar şifrelemesine izin veren ve özellikle internet gibi güvenli olmayan bir ağ üzerinden teslim edildiğinde hassas verilerin güvenliğini sağlamak için sıklıkla kullanılan bir şifreleme sisteminin temelidir. 1973'te İngiliz matematikçi Clifford Cocks tarafından bir açık anahtar algoritmasının keşfi, 1997 yılına kadar Birleşik Krallık'ın GCHQ'su tarafından gizli tutulmuş olsa da, Massachusetts Teknoloji Enstitüsü'nden Ron Rivest, Adi Shamir ve Leonard Adleman, RSA'yı ilk kez 1977'de halka açıkladı.


hwlipvf.png



Genellikle açık anahtarlı şifreleme olarak bilinen asimetrik şifreleme, matematiksel olarak birbirine bağlı bir genel ve bir özel olmak üzere iki anahtar kullanır. Genel anahtar herkesle paylaşılabilir, ancak özel anahtar gizli kalmalıdır.


hwlipvf.png



Hem genel hem de özel anahtarlar, RSA şifrelemesinde bir mesajı şifreleyebilir. Şifre çözme anahtarı, iletişimi şifrelemek için kullanılanın tam tersidir. Bu özellik, RSA'nın en yaygın olarak kullanılan asimetrik algoritma olmasının nedenlerinden biridir: elektronik iletişim ve veri depolamanın gizliliğini, bütünlüğünü, özgünlüğünü ve reddedilmemesini sağlar.


hwlipvf.png



RSA, Secure Shell (SSH), OpenPGP, S/MIME ve SSL/TLS dahil olmak üzere çeşitli protokollerde şifreleme ve dijital imza yetenekleri için kullanılır. Ayrıca, internet gibi güvenli olmayan bir ağ üzerinden güvenli bir bağlantı kurması veya bir dijital imzanın kimliğini doğrulaması gereken tarayıcılar gibi yazılımlarda da kullanılır.

Ağa bağlı sistemlerde en yaygın faaliyetlerden biri RSA imza doğrulamasıdır.


hwlipvf.png



spk4w7x.jpg



RSA Algoritması Neden Kullanılır ?


İki büyük asal sayının çarpımı olan büyük tam sayıları çarpanlarına ayırmanın zorluğu RSA'nın güvenliğinin kaynağıdır. Günümüzün süper bilgisayarlarında bile, bu iki tamsayıyı çarpmak basittir, ancak orijinal asal sayıları toplamdan hesaplamak - veya çarpanlara ayırmak - alacağı zaman nedeniyle mümkün değildir.

hwlipvf.png


RSA kriptografisinin en zor bileşeni, genel ve özel anahtarlar üretme algoritmasıdır. Rabin-Miller asallık testi prosedürü, p ve q olmak üzere iki büyük asal sayı oluşturmak için kullanılır. p ve q'nun çarpılmasıyla bir modül, n, elde edilir. Bu numara, genel ve özel anahtarlar tarafından paylaşılır ve her ikisi arasında bir bağlantı görevi görür. Anahtar uzunluğu, genellikle bit olarak verilen anahtarın uzunluğudur.

hwlipvf.png


Genel anahtar, n modülünden ve küçük bir asal tamsayı olduğu için genellikle 65537'ye ayarlanan bir genel üste, e'den oluşur. Açık anahtar herkes tarafından paylaşıldığından, e rakamının gizlice seçilmiş bir asal sayı olması gerekmez.



hwlipvf.png


Özel anahtar, n modülünden ve çarpımsal tersini bulmak için Genişletilmiş Öklid yönteminin n'nin totientine uygulanmasıyla bulunan özel üs d'den oluşur.


hwlipvf.png



okv5zo5.jpg


RSA Algoritması Nasıl Çalışır ?

Meltem, RSA anahtarları için iki asal sayı seçer: p=11 ve q=13. n=pq=143 modüldür. n (n)=(p1)x(q1)=120 totient'tir. RSA genel anahtarı e için 7'yi seçer ve 103 veren RSA özel anahtarını hesaplamak için Genişletilmiş Öklid tekniğini kullanır.

hwlipvf.png


Serdar Meltem'e şifreli bir mesaj göndermek ister, (M), bu durumda RSA açık anahtarını (n, e) alır, bu durumda (143, 7). Düz metin mesajı sadece 9 sayısıdır ve şifreli metin C ile şu şekilde kodlanmıştır:


Kodlama için Me mod n = 97 ile başlar ve mod 143 = 48 = C


hwlipvf.png


Meltem, Serdar'ın iletişimini aldığında, RSA özel anahtarını (d, n) aşağıdaki şekilde çözmek için kullanır:


Şifre çözmek için Cd mod n = 48103 ile başlar ve mod 143 = 9 = M


hwlipvf.png


Meltem'in bir hash (Serdar'a gönderdiği mesajın bir mesaj özeti) oluşturması, hash değerini kendi RSA özel anahtarıyla şifrelemesi ve bir mesajı dijital olarak imzalamak için RSA anahtarlarını kullanmak için anahtarı mesaja eklemesi gerekir. Serdar daha sonra, iletişimin kendisi tarafından gönderildiğini ve değiştirilmediğini doğrulamak için Meltem'in açık anahtarıyla karma değerinin şifresini çözebilir. Bu değer orijinal mesajın hash değeriyle eşleşiyorsa, mesaj yalnızca Meltem tarafından gönderilmiştir (kimlik doğrulama) ve tam olarak onun yazdığı gibidir (bütünlük).

hwlipvf.png


Elbette Meltem, Serdar'ın RSA açık anahtarıyla olan iletişimini Serdar'a iletmeden önce şifreleyerek gizliliği garanti altına alabilir. Dijital sertifika, sertifikanın sahibini tanımlayan bilgilerin yanı sıra, sahibinin ortak anahtarını da içerir. Sertifikalar, onları veren sertifika yetkilisi tarafından imzalanır ve genel anahtarların alınmasını ve sahibin onaylanmasını çok daha kolay hale getirebilirler.


gk3ov22.jpg


RSA Algoritması Python Örnek

Python:
import math
import base64


class AsimetrikSifreleme:

    def __init__(self):

        p = int(input('p için asal sayı gir: '))
        q = int(input('q için asal sayı gir: '))

        if not self.asalKontrol(p) or not self.asalKontrol(q):
            print('Lütfen asal giriniz')
            exit(-1)

        n = p * q

        r = (p - 1)*(q - 1)

        for i in range(1,1000):
            if(self.ortakBolen(i,r)==1):
                e=i

        d = self.carpimsalTers(e, r)
        public = (e, n)
        private = (d, n)

        print('1 - ) Şifrele\n2 - ) Çöz\n ')

        islem = input("İslem Seciniz: ")

        if islem == '1':
            data = input('Veri: ')
            e_data = self.sifrele(public, data)
            print(e_data)
            print(base64.b64encode(e_data.encode()).decode())

        elif islem == '2':
            data = base64.b64decode(input('Veri: ').encode()).decode()
            d_data = self.sifreCoz(private, data)
            print(d_data)
    
        else:
            print("Hatalı işlem")

    def asalKontrol(self,sayi):
        if sayi == 2:
            return True

        if sayi < 2:
            return False

        for i in range(2, int(math.sqrt(sayi)) + 1):
            if sayi%i == 0:
                return False

        return True

    def ortakBolen(self,e,r):
        while(r!=0):
            e,r=r,e%r
        return e

    def oklid(self,x, y):
        if x%y == 0:
            return(y, 0, 1)
        else:
            b, s, t = self.oklid(y, x%y)
            s = s - ((x//y)*t)
            return(b, t, s)

    def carpimsalTers(self,x, y):
        a, b, _ = self.oklid(x, y)
        if(a != 1):
            return None

        return b%y

    def sifrele(self,key, data):
        e, n = key
        x = []
        m = 0
        for i in data:
            if(i.isupper()):
                m = ord(i)-65
                c=(m**e)%n
                x.append(str(c))
            elif(i.islower()):
                m= ord(i)-97
                c=(m**e)%n
                x.append(str(c))
            elif(i.isspace()):
                spc=400
                x.append(str(400))
        return ','.join(x)

    def sifreCoz(self,priv_key,c_text):
        d,n=priv_key
        txt=c_text.split(',')
        x=''
        m=0
        for i in txt:
            if(i=='400'):
                x+=' '
            else:
                m=(int(i)**d)%n
                m+=65
                c=chr(m)
                x+=c
        return x

if __name__ == '__main__':
    Uygulama = AsimetrikSifreleme()


Guzel konu tesekkurler ellerine saglik
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.