ã¢ãŒããã¯ãã£ã«ã¯å€ãã®å€æŽãäºæ³ãããŸãã å¯èœãªç§»è¡ãã¹ãæäŸããŸãã OpenSSL 3.0.0ã®ãªãªãŒã¹ã¯ãã»ãšãã©ã®æ¢åã¢ããªã±ãŒã·ã§ã³ã«ã»ãšãã©åœ±é¿ãäžããŸãããã»ãšãã©ãã¹ãŠã®ãªãã©ã·ãŒã¢ããªã±ãŒã·ã§ã³ãåã³ã³ãã€ã«ããå¿ èŠããããŸãã
ãšã³ãžã³ã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠæäŸãããçŸåšã®æ©èœã¯ãæçµçã«ã¯ãœãããŠã§ã¢ã€ã³ã¿ãŒãã§ã€ã¹ã«çœ®ãæããããŸãã OpenSSL 3.0.0ã¯ãšã³ãžã³ãµããŒããä¿æããŸãã å°æ¥ã®ã¢ãŒããã¯ãã£ã¯ãOpenSSL 4.0.0以åã«å®å šã«å®è£ ã§ããŸãã
çŸåšã®ã¢ãŒããã¯ãã£
çŸåšãOpenSSLã«ã¯4ã€ã®äž»èŠã³ã³ããŒãã³ãããããŸãã
- libcryptoã å€æ°ã®æå·ããªããã£ãã®å®è£
ãæäŸããããã®ã¡ã€ã³ã©ã€ãã©ãªã ããã«ãlibsslããã³libcryptoã®ãµããŒããµãŒãã¹ã®ã»ãããããã³CMSãOCSPãªã©ã®ãããã³ã«å®è£
ãæäŸããŸãã
- ãšã³ãžã³ã libcryptoã®æ©èœã¯ããšã³ãžã³APIãä»ããŠæ¡åŒµã§ããŸãã
éåžžããšã³ãžã³ã¯libcryptoã«ç»é²ãããåçã«ããŒããããã¢ãžã¥ãŒã«ã§ãããå©çšå¯èœãªããã¯ã䜿çšããŠæå·åã¢ã«ãŽãªãºã ãå®è£ ããŸããã»ãšãã©ã®å Žåãlibcryptoã«ãã£ãŠãã§ã«æäŸãããŠããã¢ã«ãŽãªãºã ã®ä»£æ¿å®è£ ïŒããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãµããŒããªã©ïŒã§ãããOpenSSLã§å®è£ ãããŠããªãã¢ã«ãŽãªãºã ãå«ãŸããå ŽåããããŸãããã©ã«ãã§ïŒããšãã°ãGOSTã¡ã«ããºã ã¯ãã·ã¢ã®GOSTãã¡ããªãŒã®ã¢ã«ãŽãªãºã ãå®è£ ããŠããŸãïŒã äžéšã®ãšã³ãžã³ã«ã¯OpenSSLãã£ã¹ããªãã¥ãŒã·ã§ã³ãä»å±ããŠããŸãããä»ã®ãšã³ãžã³ã«ã¯ãµãŒãããŒãã£ïŒå床ãGOSTïŒãä»å±ããŠããŸãã
- libsslã libcryptoã«äŸåããTLSããã³DTLSãããã³ã«ãå®è£
ããã©ã€ãã©ãªã
- çšé libsslããã³libcryptoã®åºæ¬ã³ã³ããŒãã³ãã䜿çšããŠã次ã®ãããªæå·åããã³ãã®ä»ã®æ©èœã®ã»ãããæäŸããã³ãã³ãã©ã€ã³ããŒã«ã®ã»ããã
- ããŒãšãã©ã¡ãŒã¿ãŒã®çæãšæ€èšŒ
- 蚌ææžã®çæãšæ€èšŒ
- SSL / TLSãã¹ãããŒã«
- ASN.1æ€èšŒ
- ãã®ä»
çŸåšãOpenSSLã«ã¯æ¬¡ã®æ©èœããããŸãã
- EVP EVPã¬ã€ã€ãŒïŒãšã³ãããŒãïŒAPIã¯ãç¹å®ã®å®è£
ãåç
§ããã«ãæå·åæ©èœã®é«ã¬ãã«ã®æœè±¡ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã EVPã€ã³ã¿ãŒãã§ã€ã¹ããã€ãã¹ããæå·åã¢ã«ãŽãªãºã ã®ç¹å®ã®å®è£
ãçŽæ¥äœ¿çšããããšã¯ãå§ãããŸããã 眲åãæ€èšŒãªã©ã®è€åæäœãããã§æäŸãããŸãã äžéšã®è€åæäœãEVPã¬ãã«ã®æäœãšããŠæäŸãããŸãïŒããšãã°ãHMAC-SHA256ïŒã EVPã§ã¯ãã¢ã«ãŽãªãºã ã«äŸåããªãæ¹æ³ã§æå·åã¢ã«ãŽãªãºã ã䜿çšããããšãã§ããŸãïŒããšãã°ãEVP_DigestSignã¯RSAã¢ã«ãŽãªãºã ãšECDSAã¢ã«ãŽãªãºã ã®äž¡æ¹ã§æ©èœããŸãïŒã
- FIPS140ã¯ãµããŒããããŠããŸãããOpenSSL-1.0.2ã§ã®ã¿äœ¿çšã§ããŸããããã¯ãçŸåšã®ã¢ãŒããã¯ãã£ããåã§ãããAPIãŸãã¯ABIãšäºææ§ããããŸããã
ã³ã³ããŒãã³ãã³ã³ã»ãã
æ¢åã®ã¢ãŒããã¯ãã£ã¯ãäžéšã«æå·åå±€ãåããåçŽãª4ã¬ãã«ã®æ§é ã§ãã TLSã¬ã€ã€ãŒã¯æå·åã¬ã€ã€ãŒã«äŸåããã¢ããªã±ãŒã·ã§ã³ã¯TLSã¬ã€ã€ãŒãšæå·åã¬ã€ã€ãŒã®äž¡æ¹ã«äŸåããŸãã
泚ïŒå³ã«ã³ã³ããŒãã³ããååšãããšããããšã¯ããã®ã³ã³ããŒãã³ãããããªãã¯APIã§ããããšãããšã³ããŠãŒã¶ãŒã«ããçŽæ¥ã¢ã¯ã»ã¹/䜿çšãæå³ããŠããããšãæå³ããŸããã
ããã±ãŒãžå³
äžèšã®ã³ã³ããŒãã³ãã¯ãã©ã€ãã©ãªïŒlibcryptoããã³libsslïŒãšå¯Ÿå¿ããã«ãŒãã«ã€ã³ã¿ãŒãã§ãŒã¹ãããã³ããŸããŸãªã¢ããªã±ãŒã·ã§ã³ãèµ·åããããã®å®è¡å¯èœãªã³ãã³ãã©ã€ã³ãã¡ã€ã«ïŒopensslïŒã«ããã±ãŒãžåãããŠããŸãã ãããäžã®å³ã«ç€ºããŸãã
å°æ¥ã®ã¢ãŒããã¯ãã£
å°æ¥ã®ã¢ãŒããã¯ãã£ã®æ©èœïŒ
- ã«ãŒãã«ãµãŒãã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ããã³ãããã€ããŒïŒããšãã°ãBIOãX509ãSECMEMãASN1ãªã©ïŒã«ãã£ãŠäœ¿çšããããã«ãã£ã³ã°ãããã¯ã圢æããŸãã
- ãµãã©ã€ã€ãŒã¯æå·åã¢ã«ãŽãªãºã ãšãµããŒããµãŒãã¹ã䜿çšããŸãã ãããã€ããŒã¯ã次ã®æ©èœã®1ã€ä»¥äžãå®è£
ããŸãã
- ã¢ã«ãŽãªãºã ã®æå·ããªããã£ãïŒæå·åã埩å·åã眲åãããã·ã¥ãªã©
- ã¢ã«ãŽãªãºã ã®ã·ãªã¢ã«åãããšãã°ãç§å¯ããŒãPEMãã¡ã€ã«ã«å€æããæ©èœã ã·ãªã¢ã«åã¯ã圢åŒãŸãã¯çŸåšãµããŒããããŠããªã圢åŒã«ããããšãã§ããŸãã
- ããŒããŒããã¯ãšã³ããä¿åããŸãã OpenSSLã«ã¯çŸåšããã¡ã€ã«ããããŒããã©ã¡ãŒã¿ãŒããã®ä»ã®èŠçŽ ãèªã¿åãããã®ããŒãããŒããŒãä»å±ããŠããŸãã ãã³ããŒã¯ãããŠã³ããŒããŒãå®è£ ããŠãä»ã®å ŽæïŒLDAPãã£ã¬ã¯ããªãªã©ïŒããããŒã¿ãèªã¿åãããšãã§ããŸãã
ãããã€ããŒã¯å®å šã«èªåŸçã§ããããç°ãªããããã€ããŒãŸãã¯ã«ãŒãã«ãµãŒãã¹ã«ãã£ãŠæäŸããããµãŒãã¹ã䜿çšã§ããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã¿ãã³ããŒã«ãã£ãŠå®è£ ãããã¢ã«ãŽãªãºã ã«æå·ããªããã£ãã䜿çšã§ããŸãããå¥ã®ãã³ããŒã®ã·ãªã¢ã«åãµãŒãã¹ã䜿çšããŠããŒãPKCSïŒ12圢åŒã«ãšã¯ã¹ããŒãããŸãã
ããã©ã«ãã®ãããã€ããŒïŒOpenSSLæå·åã¢ã«ãŽãªãºã ã®çŸåšã®å®è£ ã®ã³ã¢ãå«ãïŒã¯ãçµã¿èŸŒã¿ãã§ãããä»ã®ãããã€ããŒã¯å®è¡æã«åçã«ããŒãã§ããŸãã
ã¬ã¬ã·ãŒãããã€ããŒã®ã¢ãžã¥ãŒã«ã¯ãå€ãã¢ã«ãŽãªãºã ïŒDESãMDC2ãMD2ãBlowfishãCASTãªã©ïŒã®æå·åå®è£ ãæäŸããŸãã ã¢ã«ãŽãªãºã ãããã©ã«ããããã€ããŒããå€ããããã€ããŒã«ç§»è¡ããæ¹æ³ãšã¿ã€ãã³ã°ã«é¢ããã«ãŒã«ãæçš¿ããŸãã
OpenSSL FIPSæå·åã¢ãžã¥ãŒã«ãå®è£ ããFIPSãããã€ããŒã¯ãå®è¡æã«åçã«ããŒãã§ããŸãã
- ã¢ã«ãŽãªãºã ã®æå·ããªããã£ãïŒæå·åã埩å·åã眲åãããã·ã¥ãªã©
- ã«ãŒãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãããã€ããŒïŒããã³ãã®ä»ïŒãæäŸãããµãŒãã¹ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ãã³ããŒã¯ãã«ãŒãã«ã«ã¡ãœãããžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸãã ã«ãŒãã«ã¯ãã¢ã«ãŽãªãºã ãªã©ã®ç¹å®ã®å®è£
ãçºèŠãããã¡ã«ããºã ã§ãã
ã«ãŒãã«ã¯ãã¢ã«ãŽãªãºã ãèŠã€ããããã«ããããã£ããŒã¹ã®æ€çŽ¢æ©èœãå®è£ ããŠããŸãã ããšãã°ãããã¯ãfips = trueããŸãã¯ãkeysize = 128ãconstant_time = trueãã®ã¢ã«ãŽãªãºã ãèŠã€ããŸãã 詳现ã¯ãåŸç¶ã®ãããžã§ã¯ãããã¥ã¡ã³ãã§å ¬éãããŸãã
- TLSãDTLSãªã©ã®ãããã³ã«å®è£ ã
å°æ¥ã®ã¢ãŒããã¯ãã£ã«ã¯ã次ã®ç¹æ§ããããŸãã
- EVPã¬ã€ã€ãŒã¯ããµãã©ã€ã€ãŒãéããŠå®è£
ããããµãŒãã¹ã®èãã©ãããŒã«ãªããŸãã ã»ãšãã©ã®åŒã³åºãã¯ãæå°éã®ååŠçãŸãã¯åŸåŠçã§è¡ããããããŸã£ããè¡ãããŸããã
- æ°ããEVP APIã衚瀺ãããã«ãŒãã«ã§EVPåŒã³åºãã«äœ¿çšãããã¢ã«ãŽãªãºã ã®å®è£
ãæ€çŽ¢ãããŸãã
- æ
å ±ã¯ãå®è£
ã«é¢ä¿ãªããã¡ã€ã³ã©ã€ãã©ãªãšãµãã©ã€ã€ã®éã§åãæ¹æ³ã§è»¢éãããŸãã
- å»æ¢ãããAPIïŒEVPã¬ã€ã€ãŒãééããªãäœã¬ãã«æå·åAPIãªã©ïŒã¯é€å€ãããŸãã å€ããã®ã§ã¯ãªãã¢ã«ãŽãªãºã çšã®ã¬ã¬ã·ãŒAPIãããããšã«æ³šæããŠãã ããïŒããšãã°ãAESã¯å€ãã¢ã«ãŽãªãºã ã§ã¯ãããŸããããAES_encryptã¯å€ãAPIã§ãïŒã
- OpenSSL FIPSæå·åã¢ãžã¥ãŒã«ã¯ãåçã«ããŒãããããããã€ããŒãšããŠå®è£
ãããŸãã èªåŸçã§ãïŒã€ãŸããã«ãŒãã«ã«ãã£ãŠæäŸãããã·ã¹ãã ã©ã³ã¿ã€ã ã©ã€ãã©ãªãšãµãŒãã¹ã«ã®ã¿äŸåããå ŽåããããŸãïŒã
- ä»ã®ã€ã³ã¿ãŒãã§ã€ã¹ããæéã®çµéãšãšãã«ã«ãŒãã«ã䜿çšããããã«å€æã§ããŸãïŒããšãã°ãOSSL_STOREïŒã
- ãšã³ãžã³ã䜿çšãããšããµãã©ã€ã€ãŒã«è¡ããŸãã ãããããªãããšã³ãžãã¢ãããã«ã¡ã¯ããµãã©ã€ã€ãŒ ã ã
ã³ã³ããŒãã³ãã³ã³ã»ãã
äžã®å³ã¯ãå°æ¥ã®OpenSSLã¢ãŒããã¯ãã£ã®ã³ã³ããŒãã³ãã®æŠèŠã瀺ããŠããŸãã
泚ïŒå³ã«ã³ã³ããŒãã³ããååšãããšããããšã¯ããã®ã³ã³ããŒãã³ãããããªãã¯APIã§ããããšãããšã³ããŠãŒã¶ãŒã«ããçŽæ¥ã¢ã¯ã»ã¹/䜿çšãæå³ããŠããããšãæå³ãããã®ã§ã¯ãããŸããã
以äžã®ã³ã³ããŒãã³ããããã«ç€ºãããŠããŸãã
- ã¢ããªã±ãŒã·ã§ã³ïŒã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ïŒcaãæå·ãcmsãdgstãªã©
- ãããã³ã«ïŒã³ã³ããŒãã³ãã¯ãæšæºãããã³ã«ã䜿çšããŠãšã³ããã€ã³ãéã§éä¿¡ããæ©èœãæäŸããŸãã
- TLSãããã³ã«ïŒãµããŒããããŠãããã¹ãŠã®TLS / DTLSãããã³ã«ãšãµãŒãã¹ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å®è£
ïŒ
- SSL BIOïŒTLSéä¿¡ã®BIO
- StatemïŒTLSã¹ããŒããã·ã³
- ã¬ã³ãŒãïŒTLSã¬ã³ãŒãã¬ã€ã€ãŒ
- SSL BIOïŒTLSéä¿¡ã®BIO
- ãã®ä»ã®ãããã³ã«
- CMSïŒæå·åã¡ãã»ãŒãžæ§ææšæºã®å®è£
- OCSPïŒãªã³ã©ã€ã³èšŒææžã¹ããŒã¿ã¹ãããã³ã«ã®å®è£
- TSïŒã¿ã€ã ã¹ã¿ã³ããããã³ã«ã®å®è£
- CMSïŒæå·åã¡ãã»ãŒãžæ§ææšæºã®å®è£
- ãµããŒããµãŒãã¹ïŒãããã³ã«ã³ãŒãã®å®è£
ããµããŒãããããã«ç¹å¥ã«èšèšãããã³ã³ããŒãã³ã
- ãã±ããïŒãããã³ã«ã¡ãã»ãŒãžãèªã¿åãããã®å
éšã³ã³ããŒãã³ã
- WpacketïŒãããã³ã«ã¡ãã»ãŒãžãèšé²ããããã®å éšã³ã³ããŒãã³ã
- ãã±ããïŒãããã³ã«ã¡ãã»ãŒãžãèªã¿åãããã®å
éšã³ã³ããŒãã³ã
- TLSãããã³ã«ïŒãµããŒããããŠãããã¹ãŠã®TLS / DTLSãããã³ã«ãšãµãŒãã¹ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å®è£
ïŒ
- ã«ãŒãã«ïŒããã¯ããµãŒãã¹ãªã¯ãšã¹ãïŒæå·åãªã©ïŒããµãŒãã¹ãããã€ããŒã«æ¥ç¶ããåºæ¬çãªã³ã³ããŒãã³ãã§ãã ãµãã©ã€ã€ã¯ããã®ããããã£ãšãšãã«ãµãŒãã¹ãç»é²ã§ããŸãã ã«ãŒãã«ã¯ããµãŒãã¹ãå®è¡ããå¿
èŠã®ããç¹å®ã®ããããã£ã»ãããæã€ãµãŒãã¹ãæ€çŽ¢ããæ©èœãæäŸããŸãã ããšãã°ãæå·åãµãŒãã¹ã®ããããã£ã«ã¯ããaeadãããaes-gcmãããfipsãããsecurity-bits = 128ããªã©ãå«ãŸããŸãã
- ããã©ã«ããããã€ããŒïŒã«ãŒãã«ã«ç»é²ãããããã©ã«ããµãŒãã¹ã®ã»ãããå®è£
ããŸãã
- ãµããŒããµãŒãã¹
- äœã¬ãã«ã®å®è£ ïŒããã¯ãå®éã«æå·åããªããã£ããå®è£ ããã³ã³ããŒãã³ãã®ã»ããã§ãã
- ãµããŒããµãŒãã¹
- FIPSãããã€ããŒïŒæ€èšŒãããFIPSã³ã¢ã§å©çšå¯èœãªäžé£ã®ãµãŒãã¹ãå®è£
ããŸãã 次ã®ãµããŒããµãŒãã¹ãå«ãŸããŸãã
- POSTïŒé»æºæå
¥æã»ã«ããã¹ã
- KATïŒæ¢ç¥ã®åçãã¹ã
- æŽåæ§ãã§ãã¯
- äœã¬ãã«ã®å®è£ ïŒããã¯ãæå·åããªããã£ããå®éã«å®è£ ããã³ã³ããŒãã³ãã®ã»ããã§ãïŒã¹ã¿ã³ãã¢ãã³FIPSèŠä»¶ãæºããããïŒã
- POSTïŒé»æºæå
¥æã»ã«ããã¹ã
- ã¬ã¬ã·ãŒã¢ã«ãŽãªãºã ãããã€ããŒïŒEVP APIãéããŠæäŸãããã¬ã¬ã·ãŒã¢ã«ãŽãªãºã ã®å®è£
ãæäŸããŸãã
- ãµãŒãããŒãã£ãããã€ããŒïŒOpenSSLãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžéšã§ã¯ãããŸããã 第äžè
ã¯ãç¬èªã®ãµãã©ã€ã€ãŒã販売ããå ŽåããããŸãã
- äžè¬ãµãŒãã¹ïŒã¢ããªã±ãŒã·ã§ã³ããã³ãµãã©ã€ã€ïŒããšãã°ãBIOãX509ãSECMEMãASN1ãªã©ïŒã䜿çšãããã«ãã£ã³ã°ãããã¯ã圢æããŸãã
- å»æ¢ãããAPIã ãäœã¬ãã«ãAPIïŒããã§ãå»æ¢ããšããèšèã¯ãã¢ã«ãŽãªãºã ãã®ãã®ã§ã¯ãªããAPIãå ·äœçã«æããŸãã ããšãã°ãAESã¯æ代é ãã®ã¢ã«ãŽãªãºã ã§ã¯ãããŸããããæ代é ãã®APIïŒAES_encryptãªã©ïŒããããŸãã
ããã±ãŒãžå³
äžèšã®ã³ã³ããŒãã³ãã®æŠå¿µå³ã§èª¬æããããŸããŸãªã³ã³ããŒãã³ãã¯ã次ã®ãã®ã«ç©ççã«ããã±ãŒãžåãããŠããŸãã
- ãŠãŒã¶ãŒåãã®å®è¡å¯èœã¢ããªã±ãŒã·ã§ã³
- ã¢ããªã±ãŒã·ã§ã³çšã®ã©ã€ãã©ãª
- ã«ãŒãã«çšã®åçã«ããŒãå¯èœãªã¢ãžã¥ãŒã«ã
以äžã®å®éã®ããã±ãŒãžãããã«è¡šç€ºãããŸãã
- å®è¡å¯èœãã¡ã€ã«ã¯OpenSSLã§ãã ã³ãã³ãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ã
- Libsslã TLSããã³DTLSã«çŽæ¥é¢é£ãããã¹ãŠãå«ãŸããŠããŸãã ãã®å
容ã¯ãçŸåšã®libsslãšã»ãšãã©åãã§ãã äžéšã®ãµããŒããµãŒãã¹ã¯libcryptoã«ç§»è¡ãããããšã«æ³šæããŠãã ããã
- ãªãã¯ãªãã ãã®ã©ã€ãã©ãªã«ã¯ã次ã®ã³ã³ããŒãã³ããå«ãŸããŠããŸãã
- äž»ãªãµãŒãã¹ã®å®è£
ïŒX509ãASN1ãEVPãOSSL_STOREãªã©ã
- ã³ã¢
- éTLSãŸãã¯DTLSãããã³ã«
- ãããã³ã«ãµããŒããµãŒãã¹ïŒãã±ãããWpacketãªã©ïŒ
- ãã¹ãŠã®ããã©ã«ãã¢ã«ãŽãªãºã ã®å®è£ ãå«ãããã©ã«ããããã€ããŒ
- äž»ãªãµãŒãã¹ã®å®è£
ïŒX509ãASN1ãEVPãOSSL_STOREãªã©ã
- Libcrypto-legacyã ã¬ã¬ã·ãŒã®äœã¬ãã«APIãæäŸããŸãã ãããã®APIã®ã¢ã«ãŽãªãºã ã®å®è£
ã¯ãã©ã®ãããã€ããŒããã®ãã®ã§ãããŸããŸããã
- FIPSã¢ãžã¥ãŒã«ã FIPSã«ãã£ãŠæ€èšŒãããã«ãŒãã«ã«ç»é²ãããäžé£ã®ãµãŒãã¹ãå®è£
ããFIPSãããã€ããŒãå«ãŸããŠããŸãã
- ã¬ã¬ã·ãŒã¢ãžã¥ãŒã«ã å€ããããã€ããŒãå«ãŸããŠããŸãã
- ããŒãšãã©ã¡ãŒã¿ãŒã®çæãšæ€èšŒ