ไปยังฐานโค้ด OpenSSH
หากต้องการโต้ตอบกับอุปกรณ์ที่ยืนยันการมีอยู่ของผู้ใช้ ได้มีการเพิ่มคีย์ประเภทใหม่ลงใน OpenSSH "[ป้องกันอีเมล]” (“ecdsa-sk”) ซึ่งใช้อัลกอริธึมลายเซ็นดิจิทัล ECDSA (Elliptic Curve Digital Signature Algorithm) พร้อมเส้นโค้งวงรี NIST P-256 และแฮช SHA-256 ขั้นตอนการโต้ตอบกับโทเค็นจะถูกวางไว้ในไลบรารีระดับกลาง ซึ่งโหลดในลักษณะเดียวกันกับไลบรารีเพื่อรองรับ PKCS#11 และเป็น wrapper ที่ด้านบนของไลบรารี
หากต้องการเปิดใช้งาน U2F คุณสามารถใช้โค้ดเบสชิ้นใหม่ได้
Libfido2 รองรับ OpenBSD, Linux, macOS และ Windows
ในการตรวจสอบความถูกต้องและสร้างคีย์ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม SSH_SK_PROVIDER โดยระบุเส้นทางไปยัง libsk-libfido2.so (ส่งออก SSH_SK_PROVIDER=/path/to/libsk-libfido2.so) หรือกำหนดไลบรารีผ่าน SecurityKeyProvider จากนั้นเรียกใช้ "ssh-keygen -t ecdsa-sk" หรือหากคีย์ถูกสร้างขึ้นและกำหนดค่าไว้แล้ว ให้เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ "ssh" เมื่อคุณเรียกใช้ ssh-keygen คู่คีย์ที่สร้างขึ้นจะถูกบันทึกใน “~/.ssh/id_ecdsa_sk” และสามารถใช้คล้ายกับคีย์อื่นๆ ได้
ควรคัดลอกคีย์สาธารณะ (id_ecdsa_sk.pub) ไปยังเซิร์ฟเวอร์ในไฟล์authorized_keys ทางฝั่งเซิร์ฟเวอร์ จะมีการตรวจสอบเฉพาะลายเซ็นดิจิทัลเท่านั้น และมีการโต้ตอบกับโทเค็นบนฝั่งไคลเอ็นต์ (คุณไม่จำเป็นต้องติดตั้ง libsk-libfido2 บนเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์ต้องรองรับประเภทคีย์ “ecdsa-sk”) . ไพรเวตคีย์ที่สร้างขึ้น (id_ecdsa_sk) โดยพื้นฐานแล้วคือตัวจัดการคีย์ โดยสร้างเป็นคีย์จริงเมื่อใช้ร่วมกับลำดับความลับที่จัดเก็บไว้ในฝั่งโทเค็น U2F เท่านั้น
หากคีย์ id_ecdsa_sk ตกไปอยู่ในมือของผู้โจมตี เพื่อผ่านการรับรองความถูกต้อง เขาจะต้องเข้าถึงโทเค็นฮาร์ดแวร์ด้วย โดยที่คีย์ส่วนตัวที่จัดเก็บไว้ในไฟล์ id_ecdsa_sk จะไม่มีประโยชน์ นอกจากนี้ ตามค่าเริ่มต้น เมื่อดำเนินการใดๆ ด้วยคีย์ (ทั้งระหว่างการสร้างและระหว่างการตรวจสอบสิทธิ์) จำเป็นต้องมีการยืนยันการมีอยู่จริงของผู้ใช้ในเครื่อง เช่น มีการเสนอให้แตะเซ็นเซอร์บนโทเค็น ซึ่งทำให้ยากต่อ ทำการโจมตีระบบระยะไกลด้วยโทเค็นที่เชื่อมต่อ เพื่อเป็นการป้องกันอีกระดับหนึ่ง ยังสามารถระบุรหัสผ่านในระหว่างขั้นตอนเริ่มต้นของ ssh-keygen เพื่อเข้าถึงไฟล์คีย์ได้
สามารถเพิ่มคีย์ U2F ให้กับ ssh-agent ผ่านทาง "ssh-add ~/.ssh/id_ecdsa_sk" ได้ แต่ต้องสร้าง ssh-agent ที่รองรับคีย์ "ecdsa-sk" ต้องมีเลเยอร์ libsk-libfido2 และ ตัวแทนจะต้องทำงานบนระบบที่โทเค็นเชื่อมต่ออยู่
มีการเพิ่มประเภทคีย์ใหม่ “ecdsa-sk” เนื่องจากรูปแบบของคีย์ OpenSSH ecdsa แตกต่างจากรูปแบบ U2F สำหรับลายเซ็นดิจิทัล ECDSA เมื่อมีฟิลด์เพิ่มเติม
ที่มา: opennet.ru