İPUCU

Kriptografi - Şifreleme Şifreleme Ve Şifreleme Sistemleri Hakkında Her şey.

Seçenekler

Asimetrik Şifreleme ve Blockchain

09-09-2018 19:35
#1
Üyelik tarihi:
07/2018
Yaş:
20
Mesajlar:
962
Teşekkür (Etti):
26
Teşekkür (Aldı):
137
Konular:
143
ASimetrik Şifremele (Symmetric Encryption) konusuna hoş geldiniz

asimetrik şifrelemenin aksine asimetrik şifrelemede 2 farklı anahtar vardır ki zaten adını da buradan almıştır. Bu anahtarlar public yani herkese açık ve private yani sadece kişiye özel olmak üzere isimlendirilirler. Public anahtarlar networkteki(tüm katılımcıların oluşturduğu ağ) herkese dağıtılırlar, ancak private anahtarlar sadece ve sadece kişinin kendisi tarafından bilinmelidir. Asimetrik şifreleme 2 farklı şekilde kullanılırlar:




Public key ile encryption, private key ile decryption
Bu şekildeki kullanımda örneğin siz bir lokantasınız ve tedarik ağınız var. Tedarik ağınızdaki herkes size ait public keye sahipler, size günlük meyve ve sebzelerin fiyatlarını göndermeleri üzere bir kurgumuz olsun. Herkes size ait public key ile kendilerindeki malzemelerin fiyatlarını



şifreleyip size gönderebilirler. Bir şekilde birbirlerinin verilerini ele geçirseler bile içindeki fiyat bilgilerini göremezler çünkü public key ile şifrelenen veri sadece ve sadece private key tarafından açılabilir ve bu anahtar da sadece sizde bulunmaktadır[/COLOR].






Private key ile signing, public key ile verification
Hemen güncel bir blockchain örneğini Bitcoin üzerinden verirsek, bir blockchain networkünde peerların(katılımcıların) birbirlerine mesaj göndererek haberleştiklerini biliyoruz. Örneğin A katılımcısı networke bir mesaj broadcast ediyor, B katılımcısı bu mesajı alıyor. Ancak B bu mesajı gerçekten de A’nın gönderdiğinden nasıl emin olabilir? Az önceki cümlemizi tekrarlarsak, public key networkteki tüm katılımcılara dağıtılır, private key ise sadece kişinin kendisi tarafından bilinir. Yani A katılımcısına ait public key tüm networkte olduğundan B katılımcısında da bulunuyor. A katılımcısı kendi private keyi ile imzaladığı veriyi networke gönderdiğinde diğer tüm katılımcılar A’ya ait public key ile bu verinin gerçekten A tarafından imzalandığından emin olabilir.


Bunların haricinde encryption amacıyla kullanılmayan, sadece secret key paylaşımı amacıyla kullanılan bir yaklaşım daha mevcuttur, bütün bu yaklaşımlara örneklerimize başlayalım.







RSA:


Bir şifreleme standardıdır. RSA yaklaşımında Encryption-Decryption başarımı düşük olduğundan genellikle sign-verification amacıyla kullanılır. Private key mesajın imzalanması için kullanılır, oluşan özet veri mesajın açık halinin içerisine eklenerek bu şekilde gönderilir. Alıcı, kendisine gelen ana mesajı public key aracılığı ile imzalayarak kendi özetini oluşturur ve gelen mesajın içerisindeki özet veri ile karşılaştırır. Eğer iki özet veri birbirini tutuyorsa doğrulama gerçekleşmiş olur.







Kafalarda oluşabilecek bir soruyu giderebilmek için özellikle bir konuyu belirtmek istiyorum, burada mesajın açık gittiğinden, yanında oluşturulan özetin eklendiğini söyledik. Peki bu networkte dolaşan verinin güvenliğine zıt düşmüyor mu, çünkü herkes veriyi




görebiliyor diye akıllarda canlanmış olabilir. Evet bu doğrudur, işte bu yüzden genellikle özet verisi oluşturulmuş mesajımız özet veriyle birlikte bir kez de simetrik şifrelemeyle şifrelenip bu şekilde networkte dolaşıma çıkartılırlar. Alıcı öncelikle simetrik şifrelemeyi ortadan kaldırır, sonrasında mesaja ve özete ulaşır. Sonrasında da yukarıda bahsettiğimiz verificationı tamamlayarak işlemlerini tamamlarlar
.



RSA’de public ve private keyler iki çok büyük asal sayı tarafından oluşturulurlar. Bu şekilde kırılma olasılığı çok düşürülmektedir. Aşağıda Java ile örnek bir RSA gerçekleştirimi bulunmaktadır.

Alıntı:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

import javax.crypto.Cipher;

public class Sample {

public static **** main(String [] args) throws Exception {
// generate public and private keys
KeyPair keyPair = buildKeyPair();
PublicKey pubKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

// encrypt the message
byte [] encrypted = encrypt(privateKey, "This is a secret message");
System.out.println(new String(encrypted)); // <<encrypted message>>

// decrypt the message
byte[] secret = decrypt(pubKey, encrypted);
System.out.println(new String(secret)); // This is a secret message
}

public static KeyPair buildKeyPair() throws NoSuchAlgorithmException {
final int keySize = 2048;
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(keySize);
return keyPairGenerator.genKeyPair();
}

public static byte[] encrypt(PrivateKey privateKey, String message) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);

return cipher.doFinal(message.getBytes());
}

public static byte[] decrypt(PublicKey publicKey, byte [] encrypted) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);

return cipher.doFinal(encrypted);
}
}


Digital Signature Algorithm (DSA):

Sadece sign-verification amacıyla kullanılır. DSA güvenlik prensiplerini Discrete Logarithm prensiplerine dayandırır. İmzalamada hızlı ancak doğrulamada yavaştır çünkü doğrulama aşamasında SHA hashi çözme adımına bağımlıdır. DSA RSA’den farklı olarak doğrudan private keyden oluşturulan iki sayı ve hash aracılığıyla veriyi imzalar. Karşılık gelen public key ise bu imzayı doğrulayabilir. DSA random sayılara ihtiyaç duyan bir algoritmadır, güçlü bir randomizera ihtiyaç duymaktadır. Aksi taktirde oluşan trafikle birlikte private key tahmin edilebilir hale gelmektedir.





Burada değinilmesi gerekliliğini hissettiğim bir nokta, DSA imzalamada hızlı doğrulamada yavaştır. RSA ise doğrulamada hızlı imzalamada yavaştır. Bu algoritmaların tercihlerini yaparken hangi cihazlarda bu işlemlerin gerçekleşeceğini iyi düşünmek gerekir, örneğin mobil bir cihazda gerçekleştirilecek doğrulamanın daha hızlı olması gerekir.








iptic Curve DSA(ECDSA):

Elliptic Curve Cryptography(ECC) kullanan bir DSA örneğidir. ECC, Elliptic Curve Discrete Logarithm Problem (ECDLP) olarak bilinen bir problemin çözümü olan Elliptic Curves Theory’e dayanmaktadır, bu da kırılmasını çok zor bir ihtimale sürüklemektedir. DSA gibi iyi randomize edilmiş sayılara ihtiyaç duymaktadır. RSA ve DSA’dan daha efektif anahtarlara sahiptir, 256 bitlik bir ECC 3248 bitlik bir RSA anahtarına eşdeğerdir. En güncel örneklerden Bitcoin bu algoritmayı kullanmaktadır.

Diffie-Hellman
(DH):






Diffie-Hellman anahtar değişiminde kullanılan bir yaklaşımdır. Bu yaklaşımda amaç public bir şifre aracılığıyla sadece iki kişinin bildiği anahtarı iki tarafa da ulaştırabilmektir.







yararlanılan kaynaklar :https://blog.cloudflare.com/ecdsa-th...tter-internet/


Kullanıcı İmzası
Konu Cheat Console tarafından (09-09-2018 20:01 Saat 20:01 ) değiştirilmiştir.


Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı