Mesajlar / metin RSA ve OpenSSL ile nasıl şifrelenir?


29

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

Mesaj:

Selam Alice! Lütfen akşam yemeğinde malacpörkölt'ü getirin!

Yanıtlar:


36

In openssl kılavuzuna ( opensslman sayfası), aramak RSAve RSA şifreleme için komut olduğunu göreceksiniz rsautl. Ardından sözdizimini görmek için rsautlman sayfası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 (hala birçok proktolde kullanılır); openssl ayrıca OAEP (şimdi önerilir) ve ham şifrelemeyi (sadece özel durumlarda yararlıdır) destekler.

Openssl'u doğrudan kullanmanın çoğunlukla bir egzersiz olduğunu unutmayın. Uygulamada, gpg gibi bir araç kullanırsınız ( RSA'yı kullanır, ancak mesajı doğrudan şifrelemek için kullanmazsınız).


Kullanmanın sorunu nedir openssl?
Bratchley

2
@Bratchley opensslKomut satırı aracı farklı komutların bir karışımıdır. Bazıları, çoğunlukla sertifikaları işleyenler yararlı olabilir, ancak sözdizimleri ve parametreleri tuhaf olduğu için doğru şekilde kullanılması zordur. Bazıları rsautlgayet iyi, ancak kullanışlı işlevsellik sağlamazlar, sadece ham şifreleme ilkellerini ortaya çıkarırlar - örneğin RSA şifrelemesi, yalnızca hibrit şifreleme için simetrik bir anahtarı şifrelemek için kullanılır. Bazıları encgüvenli bir şekilde kullanmak çok zor ve eğer olmasaydı dünya daha iyi durumda olurdu.
Gilles 'SO- kötülük'

Mükemmel cevap. Ben bu bayrak ile doldurma ekledi -oaep Sonra şifre çözme, aynı belirtin ... openssl rsautl -decrypt -in message.encrypted -inkey private_key.pem -oaep
rustyMagnet

24

İlk önce, sadece iyi şifreleme yapmak istiyorsanız, GnuPG'ye bakmalısınız . Ancak, denemeniz ve nasıl çalıştığını öğrenmek istiyorsanız, RSA'nın ne olduğunu anlamanız gerekir . RSA herhangi bir rastgele dizgiyi şifrelemek için tasarlanmamıştır, bir tamsayıyı şifreleyen bir algoritmadır. Spesifik olarak, 0 ila n-1 arasında bir tam sayı, burada n, ortak anahtardan gelen modül değeridir. 1024 bitlik bir RSA anahtarı hakkında konuştuğunuzda, modülün ikili olarak depolanması 1024 bit demektir. Bu sebeplerden biri, RSA'nın DES veya AES gibi simetrik bir anahtar şifresi ile kombinasyon halinde kullanılması. AES için rastgele bir 256 bit anahtar oluşturabilir ve bu anahtarı 1024 bitlik bir RSA ortak anahtarıyla şifreleyebilirsiniz. O zaman özel anahtara erişen herkes simetrik anahtara ulaşabilir ve mesajı AES ile çö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 şifreler. DES 64 bit bloklar ve AES 128 bit bloklar kullanır. Bir bloktan daha fazlasını şifrelemek için, CBC veya CTR gibi bir Çalışma Modu 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ım sırasında verileri okuyamayabilirken, veri akışına bütünlük veya özgünlük uygulanmadığı takdirde, algılama olmadan bitleri çevirebilir. Bir saldırgan, 443 numaralı bağlantı noktasına yapılan bir SSL bağlantısının muhtemelen baştan bir web sayfası isteği olduğunu kolayca tahmin edebilir ve şifrelemenin geri kalanını etkilemeden GET /bit değiştirmeyi değiştirebilir PUT /. Bütünlüğe basit bir yaklaşım, sonuna MD5 veya SHA-1 toplamı eklemektir, ancak veri doğruluğunu değil, yalnızca veri bütünlüğünü sağlar. Veri akışını tam olarak bilen herhangi biri, doğru bir toplam üretebilir, daha güvenli bir yaklaşım, HMAC gibi anahtarlı bir karma kullanmaktır. Bu, bir gizli anahtarın bilgisini gerektirir, böylece bütünlüğün yanı sıra veri doğruluğunu sağlar.


2
Bu gerçekten çok iyi
mko

5

Aşağıda, istediğiniz algoritmayı, listelenenleri veya RSA'yı (NotSSA için RSA için kullanılan tam adı bilmeme rağmen) belirteceğinizi belirleyebilirsiniz.

Sisteminizde desteklenen şifrelerin listesini almak için "openssl enc -help" komutunu kullanın ve bunu bir argüman olarak iletin. örneğin, "-aes256"

Sistemimde dikkat: Seçeneklerimde RSA yok - en azından bu isimde.


Bir S / MIME mesajını nasıl şifreleyebilirim?

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

Varsayılanı almak için - oldukça zayıf olmasına rağmen - RC2-40 şifrelemesi, mesajın ve sertifikanın nerede olduğunu openssl'ye söylersiniz.

openssl smime onu-cert.pem -encrypt -in-benim-mesaj.txt

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

openssl smime her-cert.pem -encrypt -des3 -in-my-mesaj.txt

Varsayılan olarak, posta başlıkları dahil şifreli mesaj standart çıktıya gönderilir. Bir dosyaya yönlendirmek için -out seçeneğini veya kabuğunuzu kullanın. Veya çok daha zor, çıktıyı doğrudan sendmail'e yönlendirin.

openssl smime her-cert.pem \
   -encrypt \
   -des3 \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My encrypted reply' |\
 sendmail her@heraddress.com

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

Mesajın tamamını şifrelemeniz gerekmiyorsa, ancak alıcının mesajın bütünlüğünden emin olabilmesi için imzalamak istiyorsanız, reçete şifrelemeye benzer. Temel fark, alıcının sertifikası ile hiçbir şey imzalayamadığınız için kendi anahtarınıza ve sertifikanıza sahip olmanız gerektiğidir.

 openssl smime \
   -sign \
   -signer /path/to/your-cert.pem \
   -in my-message.txt \
   -from 'Your Fullname <you@youraddress.com>' \
   -to 'Her Fullname <her@heraddress.com>' \
   -subject 'My signed reply' |\
 sendmail her@heraddress.com

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

(er ... tüm bu ters eğik çizgiler - bunların newlines'tan kaçmaları gerekiyor. Buradaki düzenleme kutumda iyi göründüğü için ne olduğundan emin değilim!


1
Yeni satırları korumak için her satırın başına dört boşluk koymanız gerekir. Size nasıl olduğunu göstermek için ilk bloğu değiştirdim. İkinci tamir edebilir misiniz?
Mikel

1
RSA'yı bulamadınız openssl encçünkü encsadece simetrik şifreleme içindir. Evet, openssl'ın seçenekleri çok iyi organize edilmemiş. Asimetrik algoritmaların kendi komutları vardır: rsa/ dsa/ dhtuşları manipüle etmek, rsautl/ dsautlşifrelemek / şifresini çözmek / doğrulamak / imzalamak ve genrsa/ gendsa/ gendhanahtarları üretmek için.
Gilles 'SO- kötülük olmayı'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.