Open Source Solution Technology Corporation HAMANO Tsukasa <hamano@osstech.co.jp> JNSA 電子署名 WG 秋祭り 君の署名は
目次 マイナンバーカードによる認証と署名 個人番号カードの中身 IC カードによる認証とデジタル署名 ユーザー認証 SSH 認証 /macos ログイン / ブラウザ デジタル署名 CMS 署名 /PDF 署名 /XML 署名 ROCA Vulnerability 1
個人番号カード 2
OpenSC スタック 3
IC カードでデジタル署名 4
IC カードでユーザー認証 5
署名用証明書 $ pkcs15-tool -r 2 -a 2 --verify-pin Issuer: C = JP, O = JPKI, OU = JPKI for digital signature, OU = Japan Agency for Local Authority Information Systems Subject: C = JP, L = Tokyo-to, L = Ota-ku, CN = YYYYMMDDHHMMSS?????LLLLL???B X509v3 Subject Alternative Name: 4 属性 X509v3 Key Usage: critical Digital Signature, Non Repudiation LLLLL は市町村コード B は更新回数 6
認証用証明書 $ pkcs15-tool -r 1 Issuer: C = JP, O = JPKI, OU = JPKI for user authentication, OU = Japan Agency for Local Authority Information Systems Subject: C = JP, CN = XXXXXXXXXXXXXXLLLLL???A Not Before: Mar 1 16:33:40 2016 GMT Not After : Feb 28 14:59:59 2021 GMT X509v3 Key Usage: critical Digital Signature LLLLL は市町村コード この証明書は PIN で保護されていない 7
認証と署名のちがい やってることは似てるけれど... 行為の意味が異なる User Consent Key Usage 署名ごとに PIN を再入力 8
マイナンバーカードで SSH https://www.osstech.co.jp/~hamano/ posts/jpki-ssh/ 9
SSH プロトコル 10
SSH 公開鍵認証 11
マイナンバーカードで macos にログイン https://www.osstech.co.jp/~hamano/ posts/jpki-macos/ 12
macos ログイン画面 13
TLS クライアント認証 14
ブラウザ対応状況 15
TLS クライアント認証 with Microsoft Edge 16
マイナンバーカードによる認証と署名 myna コマンドと mynaqt https://github.com/jpki/myna 目指すはエストニアの DigiDoc Client! 17
CMS 署名 (RFC 5652) SignedData ::= SEQUENCE { version CMSVersion, digestalgorithms DigestAlgorithmIdentifiers, encapcontentinfo EncapsulatedContentInfo, certificates [0] IMPLICIT CertificateSet OPTIONAL, crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, signerinfos SignerInfos} SignerInfo ::= SEQUENCE { version CMSVersion, sid SignerIdentifier, digestalgorithm DigestAlgorithmIdentifier, signedattrs [0] IMPLICIT SignedAttributes OPTIONAL, signaturealgorithm SignatureAlgorithmIdentifier, signature SignatureValue, unsignedattrs [1] IMPLICIT UnsignedAttributes OPTIONAL} 18
CMS 署名する $ myna sign \ -i 文書ファイル \ -o 署名付きファイル 19
CMS 署名を検証 $ openssl cms -verify \ -CAfile CA.pem \ -inform der -in 署名ファイル 20
PDF 署名 JSignPdf http://jsignpdf.sourceforge.net/ Poppler pdfsig https://poppler.freedesktop.org/ 21
JSignPdf の設定 conf/conf.properties: pkcs11config.path=conf/pkcs11.cfg conf/pkcs11.cfg: name=jpki-sign library=/path/to/opensc-pkcs11.so slot=1 22
XML 署名 マイナンバーカードによる認証と署名 <Envelope xmlns="urn:envelope"> <Data>Hello World!</Data> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod /> <SignatureMethod Algorithm="...#rsa-sha1"/> <Reference URI=""> <Transforms /> <DigestMethod Algorithm="...#sha1"/> <DigestValue> ハッシュ値 </DigestValue> </Reference> </SignedInfo> <SignatureValue> 署名値 </SignatureValue> <KeyInfo> <X509Data> <X509SubjectName> サブジェクト </X509SubjectName> <X509Certificate> 証明書 </X509Certificate> </X509Data> </KeyInfo> </Signature> </Envelope> 23
XML Security Library 24
xmlsec の改修 OpenSSL Engine 経由の鍵を指定できない問題 間に合わせの改修 : https://github.com/hamano/xmlsec/commits/pkcs11exp xmlsec1 コマンドに --privkey-engine オプションを追加 25
カードで XML 署名 OPENSSL_CONF=openssl.cnf \ xmlsec1 sign \ --crypto openssl \ --privkey-engine slot_1 \ --pubkey-cert-pem sign.pem \ --output signed.xml data.xml 26
openssl.cnf openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] pkcs11 = pkcs11_section [pkcs11_section] engine_id = pkcs11 dynamic_path = \ /usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so MODULE_PATH = /usr/local/lib/opensc-pkcs11.so 27
ROCA Vulnerability (CVE-2017-15361) 解読コスト ( 攻撃が進展する可能性も ) 1024bit RSA keys ($40 - $80) 2048bit RSA keys ($20,000 - $40,000) 該当カード エストニア eid(75 万枚 ) YubiKey の一部 28