ฉันมีกุญแจสาธารณะของอลิซ ฉันต้องการส่งข้อความเข้ารหัสของ RSA ของอลิซ ฉันจะทำมันโดยใช้openssl
คำสั่งได้อย่างไร
ข้อความคือ:
สวัสดีอลิซ! กรุณานำmalacpörköltมาทานอาหารเย็นด้วย!
ฉันมีกุญแจสาธารณะของอลิซ ฉันต้องการส่งข้อความเข้ารหัสของ RSA ของอลิซ ฉันจะทำมันโดยใช้openssl
คำสั่งได้อย่างไร
ข้อความคือ:
สวัสดีอลิซ! กรุณานำmalacpörköltมาทานอาหารเย็นด้วย!
คำตอบ:
ในคู่มือ OpenSSL ( openssl
หน้าคน) ค้นหาRSA
และคุณจะเห็นว่าคำสั่งสำหรับการเข้ารหัส RSA rsautl
เป็น จากนั้นอ่านrsautl
man pageเพื่อดูไวยากรณ์
echo 'Hi Alice! Please bring malacpörkölt for dinner!' |
openssl rsautl -encrypt -pubin -inkey alice.pub >message.encrypted
ชุดรูปแบบการแพ็ดเริ่มต้นคือ PKCS # 1 v1.5 ดั้งเดิม (ยังคงใช้ในหลาย procotols); openssl ยังรองรับ OAEP (แนะนำในขณะนี้) และการเข้ารหัสแบบดิบ (มีประโยชน์เฉพาะในกรณีพิเศษ)
โปรดทราบว่าการใช้ openssl โดยตรงส่วนใหญ่เป็นการฝึกหัด ในทางปฏิบัติคุณจะต้องใช้เครื่องมือเช่นgpg (ซึ่งใช้ RSA แต่ไม่ใช่เพื่อเข้ารหัสข้อความโดยตรง)
openssl
เครื่องมือบรรทัดคำสั่งเป็นส่วนผสมของคำสั่งที่แตกต่างกัน บางคนส่วนใหญ่เป็นคนที่จัดการใบรับรองอาจมีประโยชน์ แต่ยากที่จะใช้อย่างถูกต้องเพราะไวยากรณ์และพารามิเตอร์ของพวกเขาแปลก บางอย่างrsautl
ก็ใช้ได้ แต่ไม่มีฟังก์ชั่นที่มีประโยชน์พวกเขาเพียงแค่เปิดเผยพื้นฐานการเข้ารหัสลับดิบ - ตัวอย่างเช่นการเข้ารหัส RSA นั้นใช้ในการเข้ารหัสคีย์สมมาตรสำหรับการเข้ารหัสแบบไฮบริด บางคนชอบenc
ใช้งานอย่างหนักและโลกจะดีกว่าหากไม่มีตัวตน
ขั้นแรกถ้าคุณต้องการเพียงแค่การเข้ารหัสที่ดีคุณควรมีลักษณะที่GnuPG แต่ถ้าคุณทำการทดลองและต้องการเรียนรู้วิธีการทำงานคุณต้องเข้าใจว่าRSAคืออะไร RSA ไม่ได้ออกแบบมาเพื่อเข้ารหัสสตริงใด ๆ โดยพลการมันเป็นอัลกอริทึมที่เข้ารหัสจำนวนเต็ม โดยเฉพาะจำนวนเต็มตั้งแต่ 0 ถึง n-1 โดยที่ n คือค่าโมดูลัสจากคีย์สาธารณะ เมื่อคุณพูดถึงคีย์ RSA นั่นคือ 1024 บิตนั่นหมายความว่าใช้เวลา 1024 บิตในการจัดเก็บโมดูลัสในรูปแบบไบนารี นี่คือหนึ่งในเหตุผลที่ RSA ใช้ร่วมกับรหัสตัวเลขแบบสมมาตรเช่นDESหรือAES. คุณสามารถสร้างคีย์สุ่ม 256 บิตสำหรับ AES และเข้ารหัสคีย์นั้นด้วยคีย์สาธารณะ RSA 1024 บิต จากนั้นทุกคนที่เข้าถึงคีย์ส่วนตัวสามารถแยกคีย์สมมาตรและถอดรหัสข้อความด้วย AES มาตรฐานแบบเต็มสำหรับ RSA เรียกว่าPKCS # 1
นอกจากนี้ DES และ AES ยังเป็นบล็อกเลขศูนย์ พวกเขาเข้ารหัสข้อมูลในบล็อกที่มีขนาดเฉพาะเท่านั้น DES ใช้บล็อก 64- บิตและ AES ใช้บล็อก 128- บิต ในการเข้ารหัสมากกว่าบล็อกคุณต้องใช้โหมดการทำงานเช่น CBC หรือ CTR โหมดเหล่านี้ระบุวิธีเข้ารหัสสตรีมบิตโดยใช้รหัสโหมดบล็อก
ท้ายสุดสิ่งสำคัญคือการตรวจสอบข้อมูลที่คุณได้รับ ในขณะที่ผู้โจมตีอาจไม่สามารถอ่านข้อมูลในระหว่างการขนส่งได้เขาอาจสามารถพลิกบิตได้โดยไม่ต้องตรวจจับหากไม่มีการตรวจสอบความสมบูรณ์หรือความถูกต้องกับกระแสข้อมูล ผู้โจมตีสามารถคาดเดาได้อย่างง่ายดายว่าการเชื่อมต่อ SSL กับพอร์ต 443 อาจเป็นคำขอหน้าเว็บที่เริ่มต้นด้วยGET /
และเขาสามารถพลิกการเปลี่ยนแปลงบิตเป็นPUT /
โดยไม่รบกวนการเข้ารหัสที่เหลือ วิธีการที่เรียบง่ายเพื่อความสมบูรณ์คือการผนวกผลรวมของ MD5 หรือ SHA-1 ไว้ท้าย แต่จะให้ความสมบูรณ์ของข้อมูลเท่านั้นไม่ใช่ความถูกต้องของข้อมูล ผู้ใดที่มีความรู้อย่างสมบูรณ์ของสตรีมข้อมูลสามารถสร้างผลรวมที่ถูกต้องวิธีการที่ปลอดภัยยิ่งขึ้นคือการใช้แฮชแบบมีรหัสเช่นHMAC ซึ่งต้องใช้ความรู้ของคีย์ลับในการสร้างจึงให้การรับรองความถูกต้องของข้อมูลนอกเหนือจากความสมบูรณ์
ในด้านล่างโปรดทราบว่าคุณสามารถระบุอัลกอริทึมที่คุณต้องการไม่ว่าจะเป็นรายการที่ระบุหรือ RSA (แม้ว่าฉันจะไม่ทราบชื่อที่แน่นอนที่ใช้สำหรับ RSA โดย OpenSSL)
ใช้ "openssl enc -help" เพื่อรับรายการของ ciphers ที่ได้รับการสนับสนุนในระบบของคุณและส่งผ่านสิ่งนั้นเป็นอาร์กิวเมนต์ เช่น "-aes256"
หมายเหตุในระบบของฉันฉันไม่มี RSA ในตัวเลือกของฉัน - อย่างน้อยโดยชื่อนั้น
ฉันจะเข้ารหัสข้อความ S / MIME ได้อย่างไร
สมมติว่ามีคนส่งใบรับรองสาธารณะให้เธอและขอให้คุณเข้ารหัสข้อความบางส่วนกับเธอ คุณได้บันทึกใบรับรองของเธอเป็น her-cert.pem คุณได้บันทึกคำตอบของคุณเป็น my-message.txt
ในการรับค่าเริ่มต้น - ค่อนข้างอ่อนแอ - การเข้ารหัส RC2-40 คุณเพียงบอก openssl ว่ามีข้อความและใบรับรองอยู่ที่ไหน
openssl smime her-cert.pem -encrypt -in my-message.txt
หากคุณค่อนข้างมั่นใจว่าผู้ติดต่อระยะไกลของคุณมีชุดเครื่องมือ SSL ที่มีประสิทธิภาพคุณสามารถระบุอัลกอริทึมการเข้ารหัสที่แข็งแกร่งขึ้นเช่น triple DES:
openssl smime her-cert.pem -encrypt -des3 -in my-message.txt
ตามค่าเริ่มต้นข้อความที่เข้ารหัสรวมถึงส่วนหัวจดหมายจะถูกส่งไปยังเอาต์พุตมาตรฐาน ใช้ตัวเลือก -out หรือเปลือกของคุณเพื่อเปลี่ยนมันไปยังไฟล์ หรือหากต้องการส่งผลโดยตรงไปยัง sendmail
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
ฉันจะเซ็นข้อความ S / MIME ได้อย่างไร
หากคุณไม่จำเป็นต้องเข้ารหัสข้อความทั้งหมด แต่คุณต้องการลงชื่อเพื่อให้ผู้รับของคุณมั่นใจในความถูกต้องของข้อความสูตรจะคล้ายกับการเข้ารหัส ข้อแตกต่างที่สำคัญคือคุณต้องมีรหัสและใบรับรองของคุณเองเนื่องจากคุณไม่สามารถเซ็นชื่ออะไรด้วยใบรับรองของผู้รับ
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/ )
(เอ้อ ... แบ็กสแลชเหล่านั้นทั้งหมด - พวกมันควรจะถูกขึ้นบรรทัดใหม่ไม่แน่ใจว่าเกิดอะไรขึ้นเพราะมันแสดงได้ดีในกล่องแก้ไขของฉันที่นี่!
openssl enc
เพราะใช้enc
สำหรับการเข้ารหัสแบบสมมาตรเท่านั้น ใช่ตัวเลือกของ openssl ไม่ค่อยมีการจัดระเบียบ อัลกอริทึมแบบไม่สมมาตรมีคำสั่งของตนเอง: rsa
/ dsa
/ dh
เพื่อจัดการกับคีย์rsautl
/ dsautl
เพื่อเข้ารหัส / ถอดรหัส / ตรวจสอบ / ลงนามและgenrsa
/ gendsa
/ gendh
เพื่อสร้างคีย์
openssl
คืออะไร