it-swarm-tr.com

RSA ve OpenSSL ile mesajlar / metinler nasıl şifrelenir?

Alice'in ortak anahtarı var. Alice'e RSA şifreli bir mesaj göndermek istiyorum. openssl komutunu kullanarak nasıl yapabilirim?

Mesaj:

Merhaba Alice! Lütfen akşam yemeğine malacpörkölt getir!

29
LanceBaynes

openssl manual (openssl man sayfasında), RSA için arama yapın, RSA şifreleme komutunun rsautl olduğunu göreceksiniz. Ardından sözdizimini görmek için rsautl man sayfası bölümünü okuyun.

echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted

Varsayılan dolgu şeması orijinal PKCS # 1 v1.5'tir (yine de birçok proktolde kullanılmaktadır); openssl ayrıca OAEP (şimdi önerilmektedir) ve ham şifrelemeyi (yalnızca özel durumlarda yararlıdır) destekler.

Doğrudan openssl kullanmanın çoğunlukla bir egzersiz olduğunu unutmayın. Uygulamada, gpg (RSA kullanan ancak mesajı şifrelemek için doğrudan kullanmayan) gibi bir araç kullanırsınız.

İlk olarak, sadece iyi bir şifreleme istiyorsanız, GnuPG . Ancak denemeniz ve sadece nasıl çalıştığını öğrenmek istiyorsanız, RSA ne olduğunu anlamanız gerekir. RSA, herhangi bir rastgele dizeyi şifrelemek için tasarlanmamıştır, bir tamsayıyı şifreleyen bir algoritmadır. Spesifik olarak, 0 ila n-1 arasında bir tamsayı; burada n, ortak anahtardaki modül değeridir. 1024 bitlik bir RSA anahtarından bahsettiğinizde, modülü ikili dosyada saklamanın 1024 bit süreceği anlamına gelir. Bunun nedenlerinden biri olan RSA, DES veya [~ # ~] aes [~ # gibi simetrik bir anahtar şifresi ile birlikte kullanılır. ~] . AES için rastgele bir 256 bit anahtar oluşturabilir ve bu anahtarı 1024 bit RSA genel anahtarıyla şifreleyebilirsiniz. Daha sonra özel anahtara erişen herkes simetrik anahtarı ayıklayabilir ve AES ile mesajın kodunu çözebilir. RSA için tam standart PKCS # 1 olarak adlandırılır

Ayrıca, DES ve AES blok şifrelerdir. Yalnızca belirli bir boyuttaki bloktaki verileri şifrelerler. DES 64 bit bloklar kullanır ve AES 128 bit kullanır Bir bloktan daha fazlasını şifrelemek için, CBC veya CTR gibi Çalışma Mod kullanmanız gerekir.Bu modlar, bir blok modu şifresi kullanarak bir bit akışının nasıl şifreleneceğini belirler.

Son olarak, aldığınız verileri doğrulamak önemlidir. Saldırgan, aktarılan verileri okuyamayabilir, ancak veri akışına herhangi bir bütünlük veya özgünlük uygulanmazsa, algılama olmadan bitleri çevirebilir. Saldırgan, 443 numaralı bağlantı noktasına bir SSL bağlantısının GET / İle başlayan bir web sayfası isteği olduğunu kolayca tahmin edebilir ve şifrelemenin geri kalanına müdahale etmeden bunu PUT / Olarak değiştirerek biraz çevirebilir. Bütünlüğe basit bir yaklaşım, sonuna bir MD5 veya SHA-1 toplamı eklemektir, ancak bu veri özgünlüğü değil yalnızca veri bütünlüğü sağlar. Veri akışı hakkında tam bilgi sahibi olan herhangi biri doğru bir miktar üretebilir, daha güvenli bir yaklaşım, bir bilgi birikimi gerektiren HMAC gibi anahtarlı bir karma kullanmaktır. ve böylece bütünlüğün yanı sıra veri özgünlüğü sağlayan gizli anahtar.

25
penguin359

Aşağıda, listelenen algoritmalar veya RSA olsun istediğiniz algoritmayı belirtebileceğinizi unutmayın (OpenSSL tarafından RSA için kullanılan tam adı bilmiyorum)

sisteminizde desteklenen şifrelerin bir listesini almak için "openssl enc -help" kullanın ve bunu bağımsız değişken olarak iletin. ör. "-aes256"

Sistemimde seçeneklerimde RSA yok - en azından bu isimle.


S/MIME mesajını nasıl şifrelerim?

Birisinin size genel sertifikasını gönderdiğini ve ona bir mesaj şifrelemenizi istediğini varsayalım. Sertifikasını her-cert.pem olarak kaydettiniz. Yanıtınızı my-message.txt olarak kaydettiniz.

Varsayılan (oldukça zayıf olsa da) RC2-40 şifrelemesini almak için, openssl'e mesajın ve sertifikanın nerede olduğunu söylersiniz.

openssl smime her-cert.pem -encrypt -mesajım.txt

Uzak muhabirinizin güçlü bir SSL araç setine sahip olduğundan eminseniz, üçlü DES gibi daha güçlü bir şifreleme algoritması belirtebilirsiniz:

openssl smime her-cert.pem -encrypt -des3 -e-iletim.txt

Varsayılan olarak, posta başlıkları da dahil olmak üzere şifrelenmiş mesaj standart çıktıya gönderilir. Bir dosyaya yeniden yönlendirmek için -out seçeneğini veya Shell'inizi kullanın. Veya, çok daha zorlayıcı, çıktıyı doğrudan sendmail'e aktarın.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My encrypted reply' |\
 sendmail [email protected]

S/MIME mesajını nasıl imzalarım?

İletinin tamamını şifrelemeniz gerekmiyorsa, ancak alıcınızın iletinin bütünlüğünden emin olabilmesi için iletiyi imzalamak istiyorsanız, tarif şifreleme için olana benzer. Temel fark, alıcının sertifikasıyla hiçbir şey imzalayamayacağınız için kendi anahtarınıza ve sertifikanıza sahip olmanızdır.

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <[email protected]>' \
   -to 'Her Fullname <[email protected]>' \
   -subject 'My signed reply' |\
 sendmail [email protected]

( http://www.madboa.com/geek/openssl/ )

(er ... tüm bu ters eğik çizgiler - bunların kaçan yeni satırlar olması gerekiyor. ne var emin değilim, burada düzenleme kutumda iyi görünüyor!

5
draeath