Yubikey를 사용하여 RSA 복호화를 직접 수행할 수 있는 도구가 있나요?

Yubikey를 사용하여 RSA 복호화를 직접 수행할 수 있는 도구가 있나요?

내가 찾고 있는 사용 사례는목이 없는서버를 열고 하드웨어 키를 사용하여 "잠금 해제"하면 서버의 스크립트가 내가 연결했음을 인식하고 PIN이나 비밀번호 또는 기타 요소 없이 자동으로 사용합니다.

이를 달성하는 가장 원시적인 방법은 서버의 스크립트가 찾아 내용을 해독하는 데 사용할 수 있는 암호화되지 않은 원시 AES 키가 있는 USB 썸 드라이브를 갖는 것입니다. 단점은 USB 스틱을 복사할 수 있으며 분실 시 되돌릴 수 없다는 것입니다. 또한 스크립트가 USB 드라이브를 사용하는 동안 드라이브를 제거하면 USB 드라이브 자체의 파일 시스템이 손상될 수 있는 문제도 있습니다.

스마트 카드나 Yubikey는 이러한 문제에 대한 확실한 해결책처럼 보이지만 Yubikey 솔루션을 설명하는 대부분의 사람들은 이를 두 번째 인증 요소로 gpg와 결합하는 것 같습니다. "추가" 인증 요소가 필요하지 않으며 키가 가능한 여러 해독 방법 중 하나가 되기를 원합니다. 나는 각 호스트에 gpg를 구성하고 싶지 않으며 "신원"이나 만료 날짜, 신뢰 체인 등을 갖고 싶지 않습니다. 또 다른 인기 있는 옵션은 LUKS와 통합하는 것이지만 루트가 아닌 사용자 공간 옵션이 더 있었으면 좋겠습니다.

암호화된 AES 키를 얻고 하드웨어의 RSA 개인 키를 사용하여 이를 해독하도록 Yubikey에게 직접 요청하고 싶습니다(PIN이나 비밀번호는 필요하지 않지만 장치를 짧게 누르거나 길게 누르면 가능합니다).

이를 달성하기 위한 기존 도구가 있습니까? 스크립팅 언어 라이브러리도 좋습니다.

답변1

최신 Linux 또는 유사한 시스템에서 실행 중이라고 가정하면 암호화 부분은 매우 간단해야 합니다.

(편집: 귀하의 질문을 다시 읽어보니 당신이 보입니다.여기 간다인증에 대해 질문한 다음 RSA 암호화에 대한 구체적인 질문을 통해 여기에 답변했습니다. 여기에서 설명한 대로 설정한 다음 이런 종류의 작업을 수행하도록 설계된 pam_pkcs11을 살펴보는 것이 좋습니다. )

설정

Yubikey에 "PIV" 모드가 활성화되어 있고 통신할 수 있는 OpenSC PKCS#11 모듈이 설치되어 있는지 확인하세요. OpenSSL PKCS#11 "엔진"도 설치합니다.

사용Yubico-piv-도구또는 RSA 키를 설치하려는 다른 방법코인 투입구"카드 검증 슬롯 9e"와 같은 선택. 기존 키를 가져오거나 Yubikey 외부에 존재하지 않는 키를 생성할 수 있습니다.

계약서에 서명

이제는 쉽습니다. 파일에서 RSA 키를 사용할 수 있는 모든 소프트웨어 ~해야 한다표준을 받아들이다PKCS#11 URI대신 Yubikey의 키를 식별합니다.

카드 인증 슬롯에 있는 키의 URI는 다음과 같습니다 'pkcs11:manufacturer=piv_II;id=%04'.

그래서 당신은 다음과 같은 것을 할 수 있습니다

 echo "test payload" | openssl dgst -sha256 -sign 'pkcs11:manufacturer=piv_II;id=%04' -hex

...OpenSSL 외에는 아무것도 없습니다.상당히아직 완료되지 않았으므로 추가해야 합니다.

 -engine pkcs11 -keyform engine

모든 암호화 소프트웨어 작성자는 사용자를 싫어하고 너무 게으르기 때문에 위의 명령줄에미루다분명한 사실은 PKCS#11 URI를 제공했다는 사실에서 비롯됩니다. 이것은 또한약간최신 OpenSSL은 엔진 대신 "공급자"를 사용하기 때문에 구식이라고 생각합니다.아직단지 일을 올바르게 하는 것이 아니기 때문에 약간의 조정이 필요할 수도 있습니다.다른무의미한 비전 주문을 사용하면 그렇게 할 수 있습니다.

좋은 소프트웨어에 익숙해이러한 추가 힌트는 필수이며 단순히 파일 이름을 URI로 바꾸고 올바른 작업을 수행합니다. 그렇지 않은 경우 버그를 신고해 주세요.

 $ yubico-piv-tool -s9e -ARSA2048 -agenerate | tee pubkey.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr9LrzjNbRABqhDQrGi3l
VcQhmUu0lls8k4XnO8c/U0oS6IvH4H7HuqXFfwThYofxIgA2eIXuRXf+V/CSWtXN
40Bb10QKcTXVATm05+KFNWg1GCVg2yrvsUOQSd6MOxAa5goUUi2xOjeLFZRvXuvt
YmLytwY77YqE0WOHYfYuk9kolueZHhq4BSOVRmQpZxKd6/MkWlT46SPc3Bwbyx41
t2U42vlnHYuma3NF6qI+a+LaMyvkFVBkRM6A1WB2u5jjl/ZQmyYsuqg2e8xu7P8m
5/GUH9HjD074+ea1NEdMncPhKjO+pL24BSebtIPUmzEJIh6kCaweJYiMKYuLx15H
HQIDAQAB
-----END PUBLIC KEY-----
Successfully generated a new private key.
$ echo Test | openssl pkeyutl -encrypt  -pubin -inkey pubkey.pem > Test.enc
$ openssl pkeyutl -decrypt -in Test.enc -engine pkcs11 -keyform engine  -inkey 'pkcs11:manufacturer=piv_II;id=%04'
Engine "pkcs11" set.
Test

서명도 할 수 있습니다...

 $ echo Test | openssl dgst -sha256 -sign 'pkcs11:manufacturer=piv_II;id=%04' -engine pkcs11 -keyform engine  > signature.bin
 $ echo Test | openssl dgst -sha256 -verify pubkey.pem -signature signature.bin
Verified OK

긴 이야기 짧게

Yubikey PIV의 슬롯마다 정책이 다르며, 특히 PIN이 필요한지 여부에 관한 정책이 다릅니다. 내가 링크한 문서를 읽어보세요. 바라보다https://www.infradead.org/openconnect/pkcs11.html더 많은 팁을 보려면발견하다토큰에 제공된 개체의 URI입니다.

답변2

부인 성명:저는 Yubikey를 사용해본 적이 없습니다.

일부 배경

Yubikey는 OpenPGP를 포함한 많은 프로토콜을 지원하는 것 같습니다. 그러나 "일반적인 오래된" RSA를 지원한다고 주장하지는 않습니다. IO Yubikey 내부 어딘가에서 무언가에 대한 RSA 암호 해독을 요청받는 것이 불가능하지는 않지만 이는 공개적으로 문서화되지 않은 것 같습니다.

대신 Yubikey는 모든 의도와 목적에 맞게 많은 프로토콜을 직접 구현합니다.최대여기서 초점은 인증(원하는 것이 아님)에 있습니다.

실제로 여기에는 타당한 이유가 있을 수 있습니다. AFAIK 전문가들은 RSA를 사용하여 대량의 데이터를 암호화하는 것은 나쁜 생각이라고 생각합니다. 대신, 주요 프로토콜은 일반적으로 대칭 키를 사용하여 대량 데이터를 암호화한 다음 RSA를 사용하여 [훨씬 더 작은] 대칭 키를 암호화합니다.

암호화를 사용하면 많은 실수를 할 수 있으며 누군가가 실수를 남용할 때까지 알 수 없으므로 자신만의 프로토콜을 만드는 것은 일반적으로 나쁜 생각입니다.

Yubikey를 사용하여 데이터 암호화 및 해독

이것은 기술적으로 귀하가 요구하는 것은 아니지만 귀하의 목표를 달성하는 것 같습니다. 즉, 하드웨어 Yubikey의 도움을 통해서만 해독할 수 있는 콘텐츠를 암호화할 수 있기를 원합니다.

OpenPGP는 RSA를 사용하여 파일을 암호화하는 데 사용할 수 있는 완전한 암호화 프로토콜입니다. 기술적으로는 대칭 키를 사용하여 파일을 암호화한 다음 RSA를 사용하여 대칭 키를 암호화합니다. 또한 대부분의 *nix 운영 체제에서도 쉽게 작동합니다.

Yubikey는 OpenPGP(AKA gpg)를 지원하며 2FA뿐만 아니라 독립형으로도 사용할 수 있습니다. 더 정확하게 말하자면, Yubikey는 RSA 개인 키를 안전하게 저장하는 데 사용할 수 있으며 일반 USB 펜 드라이브에 저장하는 것과는 달리 개인 키를 호스트에 노출시키지 않고 OpenPGP 암호화 파일을 해독하는 데 도움이 될 수 있습니다!

gpg-agentGPG 키를 처리하기 위한 백엔드입니다.이봐. gpg-agent파일을 해독하기 위해 Yubikey와 직접 상호작용할 수 있어야 합니다.이봐:

gpg-card는 스마트 카드와 USB 토큰을 관리하는 데 사용됩니다. 이는 프런트 엔드로 간주될 수 있는 기능부터 gpg --card-edit스마트 카드 처리를 위해 시작되는 scdaemon데몬에 이르기까지 다양한 기능을 제공합니다 .gpg-agent

"라는 블로그 게시물이 있습니다.Yubikey를 사용하여 SSH 키 저장(RSA 4096)"는 Yubikey에 RSA 키를 저장하도록 gpg에 요청하는 방법을 설명합니다.

gpg> keytocard

...또한 녹음됨여기

여기서 해야 할 일은 사용하려는 데이터를 암호화하거나 해독하는 것뿐입니다.

# Recipient identifies which public key to encrypt with
gpg --encrypt <filename> -r <recipient ... you>

gpg --decrypt <filename>

관련 정보