จะใช้คีย์สาธารณะ ssh-rsa เพื่อเข้ารหัสข้อความได้อย่างไร?


55

ดังนั้นสถานการณ์คือ: เนื่องจากฉันเป็นบ๊อบฉันต้องการเข้ารหัสข้อความบางส่วนสำหรับอลิซ กุญแจสาธารณะเดียวที่ฉันมีคือssh-rsaid_rsa.pub ของเธอเช่นนี้:

SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAyb + qaZLwgC7KAQJzYikf3XtOWuhlMXVv2mbTKa5dp0sHPRd2RaYnH8ZRkt7V8bjqct1IHGCuxI8xyoEp4at3FHe6j9RfWiarc1ldLUCmTtryI0GGpRs6Zpvqdtpcq / 1NCIYtUQAvsImyEFCtqmB2suDo1ZSllZQ0x9TCKHdCANYIOeaniuFzR57POgE3vxk / r6PO24oy8BIWqxvi29r0n1LUigVBJ7CmMHuzb4 / + i1v6PxV1Lqnj6osPP9GpXpsh8kLUCby / KcmcryWNdSP0esyCdDxkA5hlIuk8qL1vzsyPluUQuc0BEHu6nuw8WQlCF1mFFxcpJL + MhWEr01WIIw == sikachu@Sikachus-Notebook.local

ดังนั้นมีวิธีการเข้ารหัสสตริงโดยใช้กุญแจสาธารณะนี้เพื่อให้เธอสามารถใช้กุญแจส่วนตัวของเธอจากid_rsa(สร้างขึ้นจากssh-keygen) เพื่อถอดรหัสข้อความหรือไม่

(ฉันรู้ว่ามันเป็นไปได้ทันทีหากคุณกำลังใช้.pemไฟล์คู่คีย์หากคุณสามารถแสดงวิธีแปลงให้เป็นรูปแบบที่opensslรองรับนั่นก็ยอดเยี่ยมเช่นกัน!)

ขอบคุณ!


5
คุณและอลิซควรตรวจสอบ gpg จริง ๆ ... gnupg.org ; D
tink

4
ฮ่าฮ่าฮ่าแน่นอน! อย่างไรก็ตามสถานการณ์ที่ฉันมีที่นี่คือฉันสามารถเข้าถึงssh-rsaกุญแจสาธารณะของพวกเขาแล้วและฉันไม่ต้องการที่จะเพิ่มความซับซ้อนอีกชั้น (เช่นขอให้ผู้รับไปติดตั้ง gpg ฯลฯ )
sikachu

คำตอบ:


71

เป็นไปได้ที่จะแปลงรหัสสาธารณะ ssh เป็นรูปแบบ PEM (ที่ 'openssl rsautl' สามารถอ่านได้):

ตัวอย่าง:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > id_rsa.pem.pub

สมมติว่า 'myMessage.txt' เป็นข้อความของคุณซึ่งควรเป็นรหัสสาธารณะแบบเข้ารหัส

จากนั้นเพียงเข้ารหัสข้อความของคุณด้วย openssl rsautl และรหัสสาธารณะ PEM ที่คุณแปลงตามปกติ:

openssl rsautl -encrypt -pubin -inkey id_rsa.pem.pub -ssl -in myMessage.txt -out myEncryptedMessage.txt

ผลลัพธ์คือข้อความที่เข้ารหัสของคุณใน 'myEncryptedMessage.txt'

วิธีทดสอบงานของคุณเพื่อถอดรหัสด้วยคีย์ส่วนตัวของอลิซ:

openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in myEncryptedMessage.txt -out myDecryptedMessage.txt

5
ฉันรวบรวมมันไว้ในสคริปต์ที่ดึงรหัสสาธารณะของผู้ใช้จาก GitHub github.com/twe4ked/catacomb
twe4ked

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันssh-keygenไม่มี-mตัวเลือก (ฉันไม่สามารถหาวิธีถามรุ่นของ ssh-keygen ได้) การแทนที่-mด้วย-tงาน แต่แล้วopensslบอกฉันว่า "ไม่สามารถโหลดกุญแจสาธารณะ" ดูstackoverflow.com/questions/18285294/...
Jason Gross

1
ปัญหาเดียวกับที่ Jason มีใน MaxOS Mavericks แทนที่ -m ด้วย -t สำหรับการสร้างคีย์ที่เปิดใช้งาน keygen
Robert Christian

8
โปรดทราบว่านี่จะใช้งานได้หากไฟล์มีขนาดเล็กพอ เช่น 200 ไบต์ ดูstackoverflow.com/questions/7143514/…
h__

1
Echoing สิ่งที่ @hyh กล่าวว่าจะใช้งานได้ก็ต่อเมื่อไฟล์อินพุตมีขนาดเล็ก (บรรทัดมีขนาดประมาณ 254 ไบต์มิฉะนั้นจะให้ "rsa รูทีน: RSA_padding_add_SSLv23: ข้อมูลมีขนาดใหญ่เกินไปสำหรับขนาดคีย์: /SourceCache/OpenSSL098/OpenSSL098-52.20 2 / src / crypto / rsa / rsa_ssl.c: 73 "ข้อผิดพลาด
Devy

1

ลองssh-vault โดยใช้กุญแจสาธารณะ ssh-rsa เพื่อเข้ารหัส "สร้างห้องนิรภัย" และกุญแจส่วนตัว ssh-rsa เพื่อถอดรหัส "ดูเนื้อหาของห้องนิรภัย"


-3

ทำไมไม่ทำอย่างนี้อย่างเห็นได้ชัดสุด ๆ ที่ไม่ต้องใช้การหมุน crypto ของคุณเอง

Alice sftps เป็น alice@bobserver.com ซึ่งได้รับการตั้งค่าให้อนุญาตเฉพาะการตรวจสอบสิทธิ์กุญแจสาธารณะสำหรับบัญชี alice คุณสมบัติของ ssh อย่างมั่นใจว่าเฉพาะอลิซเท่านั้นที่สามารถทำการอัตโนมัติ แม้แต่คนที่อยู่ตรงกลางการโจมตีล้มเหลวตั้งแต่ (สมมติว่าคุณปิดการใช้งาน ssh1 และยืนยันในการตั้งค่าที่ถูกต้อง) การสื่อสารเริ่มต้นโดยใช้ DH สร้างค่าที่รู้จักทั้งอลิซและบ๊อบ แต่ไม่ใช่คนที่อยู่ตรงกลาง ที่ไม่มีการตอบกลับหรือการโจมตี MITM สามารถดูเนื้อหาของ communicatino

มี alice sftp ลงในกล่องของคุณแล้วดาวน์โหลดไฟล์


9
การใช้ openssl เป็นการเปลี่ยน crypto ของคุณเองอย่างไร?
cmc

ตัวอย่างเช่นการใช้ RSA เพื่อเข้ารหัสสตริงอักขระ 1024 จะล้มเหลวเนื่องจากขนาดข้อความ เพื่อเอาชนะปัญหานี้ผู้ดำเนินการอยู่ในสถานการณ์ที่ล่อแหลมโดยเฉพาะอย่างยิ่งถ้ามีข้อความซ้ำ มันปลอดภัยที่จะใช้ RSA เพื่อเข้ารหัสคีย์ตัวเลข symmetric ใหม่และเวกเตอร์เริ่มต้นซึ่งไม่น่าจะซ้ำดังนั้นสร้างข้อความตัวเลขที่ไม่ซ้ำกันสำหรับข้อความที่เคยส่งและรับความเร็วเข้ารหัสสมมาตรและลดจำนวนตัวเลขและข้อความธรรมดา เพื่อโจมตีคีย์ RSA ด้วย หวังว่าเหมาะสม :)
Sam

วิธีนี้ต้องการให้บ๊อบไว้วางใจอลิซหรือล็อค bobserver.com เพื่อให้อลิซไม่สามารถทำสิ่งที่เป็นอันตรายได้
mwfearnley

มันกลิ้งตัวคุณเองในแง่ที่ว่าอลิซต้องผ่านการปฏิบัติการที่ผิดปกติเป็นจำนวนมากเพื่อถอดรหัสไม่ได้อยู่ในความหมายของคณิตศาสตร์พื้นฐานที่จะม้วนตัวคุณเอง เช่นนี้ถูกถามในแง่ของอรรถประโยชน์บรรทัดคำสั่งมากกว่า API หรือมุมมองเชิงทฤษฎีสมมติว่าแต่ละคนต้องการถ่ายโอนข้อมูลที่เป็นรูปธรรมไม่ใช่ piggyback โปรโตคอลใหม่ที่ด้านบนของ ssh เนื่องจากการใช้งานจริงของ SFTP นั้นดูเหมือนง่ายกว่าและใช่แล้วมันต้องมีการค้นหาเซิร์ฟเวอร์โดยเชื่อใจว่า Alice หรือเช็ดเซิร์ฟเวอร์ในภายหลัง
Peter Gerdes

ดูเหมือนว่าในข้างต้นมีความเสี่ยงที่จะมีคนดักอีเมลที่คุณอธิบายว่าเธอสามารถถอดรหัสข้อความผิดปกตินี้ได้อย่างไรและให้ลำดับของคำสั่งที่จะถอดรหัสข้อความ MITM ของ Charlie อย่างปลอดภัย (คำสั่ง openssl เป็นเหมือนเวทมนต์ คาถามากที่สุด) ในขณะที่ความคิดของเซิร์ฟเวอร์หลีกเลี่ยงสิ่งเหล่านี้ในความโปรดปรานของคำสั่งมาตรฐานที่หลายคนคุ้นเคยและถ้าบ๊อบเรียกใช้จากคอมพิวเตอร์ เห็นได้ชัดว่าคำตอบที่ดีที่สุดขึ้นอยู่กับรูปแบบการคุกคาม แต่จากบริบท q นี้น่าจะให้บริการได้ดีขึ้น
Peter Gerdes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.