ããžã¿ã«ã»ãã¥ãªãã£ã«ããããšã³ããããŒã®éèŠãªåœ¹å²ãæ¢ããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ã乱鿧ã®ãœãŒã¹ããšã³ããããŒããŒã«ãéçºè ãšã·ã¹ãã 管çè åãã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠè§£èª¬ããŸãã
ã»ãã¥ãªãã£ãæ¯ããèŠããããšã³ãžã³ïŒã·ã¹ãã ãšã³ããããŒåéã®æ·±æã
ç§ãã¡ã®ããžã¿ã«äžçã¯ãç§å¯ã«äŸåããŠããŸããã¡ãŒã«ã®ãã¹ã¯ãŒããéèååŒãæå·åããéµããµãŒãã¹ãžã®ãã°ã€ã³ç¶æ ãç¶æããã»ãã·ã§ã³ããŒã¯ã³ââãããã¯ãã¹ãŠãäºæž¬äžå¯èœã§ããéãã«ãããŠã®ã¿äŸ¡å€ãæã¡ãŸããããæµå¯Ÿè ãããªãã®æ¬¡ã®ãç§å¯ããæšæž¬ã§ãããªããããã¯ãã¯ãç§å¯ã§ã¯ãªããªããŸãããã®äºæž¬äžèœæ§ã®äžå¿ã«ã¯ãæ å ±çè«ãšç©çåŠã®åºæ¬æŠå¿µãã³ã³ãã¥ãŒãã£ã³ã°ã«å¿çšããããšã³ããããŒãšããèãæ¹ããããŸãã
ã³ã³ãã¥ãŒã¿ãŒç§åŠè ãã»ãã¥ãªãã£å°éå®¶ã«ãšã£ãŠããšã³ããããŒãšã¯ä¹±éæ§ãã€ãŸããé©ããã®å°ºåºŠã§ããããã¯æå·æè¡ã®çåœç·ã§ãããç§ãã¡ã®ããžã¿ã«ã¢ã€ãã³ãã£ãã£ãéãã«å®ãä¿è·è ã§ããããããæ±ºå®è«çã§è«çé§ååã®æ©æ¢°ã§ããç§ãã¡ã®ã³ã³ãã¥ãŒã¿ãŒã¯ããã®äžå¯æ¬ ãªæ··æ²ãã©ãã§èŠã€ããŠããã®ã§ããããïŒäºæž¬å¯èœãª1ãš0ã®åºç€ã®äžã«æ§ç¯ãããã³ã³ãã¥ãŒã¿ãŒããã©ã®ããã«ããŠçã®äºæž¬äžèœæ§ãçã¿åºãã®ã§ããããïŒ
ãã®æ·±æãã§ã¯ãé åçã§ããã°ãã°ç®ã«èŠããªããšã³ããããŒåéã®ããã»ã¹ãè§£æããŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãç©çäžçããã©ã®ããã«ç¬åµçãªæ¹æ³ã§ä¹±éæ§ãåéãããããã©ã管çããŠããã®ãããããŠãªããã®ããã»ã¹ãçè§£ããããšããçŸä»£ã®ã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ãæ§ç¯ã管çããŸãã¯ä¿è·ãããã¹ãŠã®äººã«ãšã£ãŠéèŠãªã®ããæ¢ããŸãã
ãšã³ããããŒãšã¯äœãããããŠãªãéèŠãªã®ãïŒ
ãã®æºæ³ãæ¢ãåã«ãèšç®è«çãªæèã«ããããšã³ããããŒã®æå³ãæç¢ºã«ããŸããããããã¯éšå±ã®æ£ãããå ·åã®ããšã§ã¯ãªããæ å ±ã®äºæž¬äžèœæ§ã®ããšã§ããé«ããšã³ããããŒãæã€ããŒã¿æååã¯ãæšæž¬ãããå§çž®ãããããã®ãå°é£ã§ããäŸãã°ããaaaaaaaaããšããæååã¯ãšã³ããããŒãéåžžã«äœãã§ãããã8jK(t^@Lãã®ãããªæååã¯é«ããšã³ããããŒãæã£ãŠããŸãã
èšç®è«çã©ã³ãã æ§ã®å®çŸ©
ä¹±æ°çæã®äžçã§ã¯ãäž»ã«2ã€ã®ã«ããŽãªã«åé¡ãããŸãã
- ç䌌乱æ°çæåš (PRNG): ããã¯ãã©ã³ãã ã«èŠããæ°åãçæããã¢ã«ãŽãªãºã ã§ãããå®éã«ã¯ãã·ãŒãããšåŒã°ããåæå€ã«ãã£ãŠå®å šã«æ±ºå®ãããŸããåãã·ãŒããäžããã°ãPRNGã¯åžžã«å šãåãæ°åãçæããŸããåçŸæ§ãå¿ èŠãªã·ãã¥ã¬ãŒã·ã§ã³ãã¢ããªã³ã°ã«ã¯åªããŠããŸãããã·ãŒããæšæž¬å¯èœãªå Žåãã»ãã¥ãªãã£çšéã«ã¯å±éºãªã»ã©äºæž¬å¯èœã§ãã
- çæ§ä¹±æ°çæåš (TRNG): ãã®çæåšã¯æ°åŒã«äŸåããŸããã代ããã«ãäºæž¬äžå¯èœãªç©ççŸè±¡ãã乱鿧ãå°ãåºããŸããTRNGã®åºåã¯é決å®çã§ãããéå»ã®å šå±¥æŽãç¥ã£ãŠããŠãæ¬¡ã®æ°å€ãäºæž¬ããããšã¯ã§ããŸããããããããã匷åãªæå·æè¡ã«æ±ãããã乱鿧ã®è³ªã§ãã
ã·ã¹ãã ãšã³ããããŒåéã®ç®çã¯ãTRNGãœãŒã¹ããããŒã¿ãåéãããããã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥æäŸããããããäžè¬çã«ã¯ãé«åè³ªã§æå·è«çã«å®å šãªPRNG (CSPRNG) ã«å®å šã«ã·ãŒããæäŸããããšã§ãã
ã»ãã¥ãªãã£ã«ããããšã³ããããŒã®éèŠãªåœ¹å²
é«å質ãªãšã³ããããŒã®æ¬ åŠã¯ã壿» çãªã»ãã¥ãªãã£é害ã«ã€ãªããå¯èœæ§ããããŸããããã·ã¹ãã ãäºæž¬å¯èœãªãã©ã³ãã ããªæ°å€ãçæããã°ããã®äžã«æ§ç¯ãããã»ãã¥ãªãã£ã¢ãŒããã¯ãã£å šäœã厩å£ããŸãããšã³ããããŒãäžå¯æ¬ ãªé åãããã€ãæããŸãã
- æå·éµã®çæ: SSHéµãPGPéµããŸãã¯SSL/TLSèšŒææžãçæããéãã·ã¹ãã ã¯å€§éã®çã®ä¹±éæ§ãå¿ èŠãšããŸãããã2ã€ã®ã·ã¹ãã ãåãäºæž¬å¯èœãªã©ã³ãã ããŒã¿ã§éµãçæãããšãåäžã®éµãçæãããŠããŸããããã¯å£æ» çãªæ¬ é¥ãšãªããŸãã
- ã»ãã·ã§ã³ç®¡ç: ãŠã§ããµã€ãã«ãã°ã€ã³ãããšããã©ãŠã¶ãèå¥ããããã®äžæã®ã»ãã·ã§ã³IDãçæãããŸããæ»æè ãã»ãã·ã§ã³ããã€ãžã£ãã¯ããã®ãé²ãããããã®IDã¯æšæž¬äžå¯èœã§ãªããã°ãªããŸããã
- ãã³ã¹ãšãœã«ã: æå·æè¡ã«ãããŠãããã³ã¹ãïŒäžåºŠã ã䜿ãããæ°ïŒã¯ãªãã¬ã€æ»æãé²ãããã«äœ¿çšãããŸãããã¹ã¯ãŒãããã·ã¥ã§ã¯ãããœã«ããã¯ããã·ã¥åããåã«ãã¹ã¯ãŒãã«è¿œå ãããã©ã³ãã ãªå€ã§ãã¬ã€ã³ããŒããŒãã«æ»æãé²ããŸããã©ã¡ããäºæž¬äžå¯èœã§ãªããã°ãªããŸããã
- æå·åãããã³ã«: TLSã®ãããªãããã³ã«ã¯ãã»ãã·ã§ã³çšã®å ±æç§å¯éµã確ç«ããããã®ãã³ãã·ã§ã€ã¯ããã»ã¹äžã«ä¹±æ°ã«äŸåããŸããããã§æ°å€ãäºæž¬å¯èœã ãšãçèŽè ãäŒè©±å šäœãè§£èªã§ããŠããŸãå¯èœæ§ããããŸãã
ä¹±éæ§ã®æ¢æ±ïŒã·ã¹ãã ãšã³ããããŒã®æºæ³
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯èгå¯ã®é人ã§ãããç©çäžçã®äºæž¬äžå¯èœãªãã€ãºãåžžã«ç£èŠããŠããŸãããã®ãã€ãºã¯ãããžã¿ã«åããåŠçãããããšã§ãã·ã¹ãã ã®ãšã³ããããŒããŒã«ã®åææãšãªããŸãããã®æºæ³ã¯å€æ§ãã€ç¬åµçã§ããããµããåºæ¥äºã貎éãªä¹±éæ§ã®æµãã«å€ããŸãã
ããŒããŠã§ã¢ããŒã¹ã®ãœãŒã¹ïŒç©çäžçããã®å©çš
æãä¿¡é Œæ§ã®é«ããšã³ããããŒã®æºæ³ã¯ãããŒããŠã§ã¢ã³ã³ããŒãã³ãããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã®åŸ®çŽ°ã§æ··æ²ãšããå€åããããããããŸããéèŠãªã®ã¯ããããã®ã€ãã³ãã®æ£ç¢ºãªã¿ã€ãã³ã°ã枬å®ããããšã§ãããªããªãããã®ã¿ã€ãã³ã°ã¯ç¡æ°ã®äºæž¬äžå¯èœãªç©ççèŠå ã«åœ±é¿ãããããã§ãã
ãŠãŒã¶ãŒå ¥åã®ã¿ã€ãã³ã°
ãŠãŒã¶ãŒãå埩çãªã¿ã¹ã¯ãå®è¡ããŠãããšãã§ããããã®è¡åã®æ£ç¢ºãªã¿ã€ãã³ã°ã¯æ±ºããŠå®å šã«åäžã§ã¯ãããŸããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«ã¯ããããã®å€åããã€ã¯ãç§ãããç§ã®åäœã§æž¬å®ã§ããŸãã
- ããŒããŒãå ¥åã®ã¿ã€ãã³ã°: ã·ã¹ãã ã¯ãã©ã®ããŒãæŒããããã§ã¯ãªãããã€æŒãããããæ°ã«ããŸããããŒã¹ãããŒã¯éã®é å»¶ãã€ãŸãããããŒãæŒãããŠããæ¬¡ã®ããŒãæŒããããŸã§ã®æéã¯ã人éã®æèããã»ã¹ã埮现ãªçèã®çæ£ãã·ã¹ãã è² è·ã«åœ±é¿ãããè±ããªãšã³ããããŒã®æºæ³ã§ãã
- ããŠã¹ã®åã: ããŠã¹ã«ãŒãœã«ãç»é¢äžãç§»åããè»è·¡ã¯ã決ããŠçŽç·ã§ã¯ãããŸãããã«ãŒãã«ã¯X/Y座æšãšåç§»åã€ãã³ãã®ã¿ã€ãã³ã°ããã£ããã£ããŸããæã®åãã®æ··æ²ãšããæ§è³ªã¯ãã©ã³ãã ããŒã¿ã®é£ç¶çãªæµããæäŸããŸãã
ããŒããŠã§ã¢å²ã蟌ã¿ãšããã€ã¹ã®ã¿ã€ãã³ã°
çŸä»£ã®ã³ã³ãã¥ãŒã¿ãŒã¯éåæã€ãã³ãã®äº€é¿æ²ã§ããããã€ã¹ã¯åžžã«CPUã«å²ã蟌ã¿ããããã¿ã¹ã¯ãå®äºããããšãå ±åããŸãããããã®å²ã蟌ã¿ã®ã¿ã€ãã³ã°ã¯ãçŽ æŽããããšã³ããããŒã®æºæ³ãšãªããŸãã
- ãããã¯ãŒã¯ãã±ããã®å°çæé: ãããã¯ãŒã¯ãã±ããããµãŒããŒããããªãã®ã³ã³ãã¥ãŒã¿ãŒã«å°éãããŸã§ã«ãããæéã¯ããããã¯ãŒã¯ã®æ··éãã«ãŒã¿ãŒã®ãã¥ãŒã€ã³ã°é å»¶ãWi-Fiä¿¡å·ãžã®å€§æ°å¹²æžãè¡æãªã³ã¯ã«åœ±é¿ãäžãã倪éœãã¬ã¢ãªã©ã倿°ã®äºæž¬äžå¯èœãªèŠå ã«åœ±é¿ãããŸããã«ãŒãã«ã¯åãã±ããã®æ£ç¢ºãªå°çæéãæž¬å®ãããã®ãžãã¿ãŒããšã³ããããŒãšããŠåéããŸãã
- ãã£ã¹ã¯I/Oã®ã¿ã€ãã³ã°: ããŒããã©ã€ãã®èªã¿æžãããããç¹å®ã®ãã©ãã¯ã«ç§»åãããã©ãã¿ãŒãæ£ããã»ã¯ã¿ãŒãŸã§å転ããã®ã«ãããæéã¯ããã©ã€ãçäœå ã®åŸ®çްãªç©ççå€åã空æ°ã®ä¹±ãã«åœ±é¿ãããŸãããœãªããã¹ããŒããã©ã€ã (SSD) ã®å Žåããã©ãã·ã¥ã¡ã¢ãªæäœã®ã¿ã€ãã³ã°ã«ãéæ±ºå®çãªèŠçŽ ãå«ãŸããããšããããŸãããããã®I/Oãªã¯ãšã¹ãã®å®äºæéã¯ããããªãä¹±éæ§ã®æºæ³ãšãªããŸãã
å°çšããŒããŠã§ã¢ä¹±æ°çæåš (HRNG)
é«ãã»ãã¥ãªãã£ãæ±ããããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãç°å¢ãã€ãºã«é Œãã ãã§ã¯ååã§ãªãå ŽåããããŸããããã§ç»å Žããã®ãå°çšã®ããŒããŠã§ã¢ã§ããå€ãã®çŸä»£ã®CPUããããã»ããã«ã¯ãã·ãªã³ã³èªäœã«å°çšã®HRNGãæèŒãããŠããŸãã
- ä»çµã¿: ãããã®ãããã¯ãçã«äºæž¬äžå¯èœãªç©ççŸè±¡ã掻çšããããã«èšèšãããŠããŸããäžè¬çãªæ¹æ³ã«ã¯ãç±éé³ïŒæµæåšå ã®é»åã®ã©ã³ãã ãªåãïŒãåå°äœã«ãããéåãã³ãã«å¹æããŸãã¯æŸå°æ§ç©è³ªã®åŽ©å£ã®æž¬å®ãªã©ããããŸãããããã®ããã»ã¹ã¯éåååŠã®æ³åã«æ¯é ãããŠããããããã®çµæã¯æ ¹æ¬çã«äºæž¬äžå¯èœã§ãã
- äŸ: èåãªäŸãšããŠãIntelã®ã»ãã¥ã¢ããŒã»ãã¯ãããžãŒããããããã«ã¯`RDRAND`ããã³`RDSEED`åœä»€ãå«ãŸããŸããããã«ããããœãããŠã§ã¢ã¯ãªã³ãããã®HRNGããçŽæ¥é«å質ãªã©ã³ãã ããããèŠæ±ã§ããŸããAMDããã»ããµã«ãåæ§ã®æ©èœããããŸãããããã¯ãšã³ããããŒã®ãŽãŒã«ãã¹ã¿ã³ããŒããšèŠãªãããŠãããå©çšå¯èœãªå Žåã¯çŸä»£ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§åºã䜿çšãããŠããŸãã
ç°å¢ãã€ãº
äžéšã®ã·ã¹ãã ã§ã¯ã身ã®åãã®ç°å¢ããã®ãã€ãºãå©çšããããšããããŸãããããã¯æ±çšã®ãµãŒããŒããã¹ã¯ãããã§ã¯ããŸãäžè¬çã§ã¯ãããŸããã
- é³å£°å ¥å: åšå²ã®éšå±ã®ãã€ãºãããã€ã¯èªäœã®åè·¯ããçºçããç±éé³ãæãããã€ã¯å ¥åã®æäžäœããããããšã³ããããŒãœãŒã¹ãšããŠäœ¿çšã§ããŸãã
- æ åå ¥å: åæ§ã«ãæªæ ¡æ£ã®ã«ã¡ã©ã»ã³ãµãŒããã®ãã€ãºïŒåäžãªé¢ã«åããŠããã¯ã»ã«ã®æããã«çããããããªã©ã³ãã ãªå€åïŒãããžã¿ã«åãããšã³ããããŒããŒã«ã«è¿œå ããããšãã§ããŸãã
ãšã³ããããŒããŒã«ïŒã·ã¹ãã ã®ä¹±éæ§è²¯æ°Žæ±
ãããã®å€æ§ãªãœãŒã¹ããçããŒã¿ãåéããããšã¯ãæåã®ã¹ãããã«ãããŸããããã®çããŒã¿ã¯åäžã«ååžããŠããªãå¯èœæ§ããããæ»æè ããœãŒã¹ã®1ã€ã«åœ±é¿ãäžããããšãã§ãããããããŸãããããã解決ããããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãšã³ããããŒããŒã«ãšåŒã°ããã¡ã«ããºã ã䜿çšããŸãã
ãšã³ããããŒããŒã«ã倧ããªå€§éã ãšèããŠãã ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãããŒããŒãã®ã¿ã€ãã³ã°ãããŠã¹ã®åãããã£ã¹ã¯I/Oããã®ä»ã®ãœãŒã¹ããåéããã©ã³ãã ãªããããææãšããŠæå ¥ããŸããããããåã«æ··ããã ãã§ã¯ãªããæå·åŠçãªãæªæã颿°ã䜿çšããŸãã
ä»çµã¿ïŒæªæããã»ã¹
æ°ããã©ã³ãã ããŒã¿ïŒäŸãã°ããããã¯ãŒã¯ãã±ããã®å°çæéããåŸããããã®ïŒãå©çšå¯èœã«ãªããšãããã¯åã«ããŒã«ã«è¿œå ãããã®ã§ã¯ãããŸããã代ããã«ãSHA-1ãSHA-256ã®ãããªåŒ·åãªæå·åŠçããã·ã¥é¢æ°ã䜿çšããŠãããŒã«ã®çŸåšã®ç¶æ ãšçµåãããŸãããã®ããã»ã¹ã«ã¯ãããã€ãã®éèŠãªå©ç¹ããããŸãã
- çœè²å/æ··å: æå·åŠçããã·ã¥é¢æ°ã¯ãæ°ããå ¥åãæ¢åã®ããŒã«ãšåŸ¹åºçã«æ··åããŸããããã«ãããçã®å ¥åãåäžã§ãªããŠããããŒã«ã®åºåãçµ±èšçã«äžæ§ã«ãªãããšãä¿èšŒãããŸããå ¥åãœãŒã¹ã®åããå¹³æ»åããŸãã
- é¡åèæ§: ããã·ã¥é¢æ°ã®æã€äžæ¹åæ§ã®ããããšã³ããããŒããŒã«ã®åºåã芳枬ããæ»æè ã¯ãããã»ã¹ãéè¡ãããŠããŒã«ã®ä»¥åã®ç¶æ ã远å ãããçã®å ¥åãçªãæ¢ããããšã¯ã§ããŸããã
- ãœãŒã¹ã®ç¬ç«æ§: æ°åã®ãœãŒã¹ããã®å ¥åãåžžã«æ··åããããšã§ãããšãæ»æè ã1ã€ã®ãœãŒã¹ïŒäŸãã°ãäºæž¬å¯èœãªã¬ãŒãã§ãããã¯ãŒã¯ãã±ãããéä¿¡ããïŒãå¶åŸ¡ã§ãããšããŠãããã®åœ±é¿ã¯ä»ã®ãã¹ãŠã®æ··åããããœãŒã¹ã«ãã£ãŠèããããèŠãé ãããããšãä¿èšŒãããŸãã
2çš®é¡ã®ã¢ã¯ã»ã¹æ¹æ³ïŒããããã³ã° vs. éããããã³ã°
Linuxãªã©ã®Unixç³»ã·ã¹ãã ã§ã¯ãã«ãŒãã«ã®ãšã³ããããŒããŒã«ã¯éåžžã`/dev/random`ãš`/dev/urandom`ãšãã2ã€ã®ç¹å¥ãªããã€ã¹ãã¡ã€ã«ãä»ããŠã¢ããªã±ãŒã·ã§ã³ã«å ¬éãããŸããäž¡è ã®éããçè§£ããããšã¯éåžžã«éèŠã§ãããããæ··ä¹±ãæãç¹ã§ãã
/dev/randomïŒé«ä¿èšŒãœãŒã¹
`/dev/random`ããããŒã¿ãèŠæ±ãããšãã«ãŒãã«ã¯ãŸãããŒã«å ã«çŸåšã©ãã ãã®ãçã®ããšã³ããããŒãããããæšå®ããŸãããã32ãã€ãã®ä¹±éæ§ãèŠæ±ããŠããã«ãŒãã«ã10ãã€ãåã®ãšã³ããããŒãããªããšå€æããå Žåã`/dev/random`ã¯ãã®10ãã€ããè¿ãããã®åŸãããã¯ããŸããã€ãŸããã¢ããªã±ãŒã·ã§ã³ãäžæåæ¢ãããèŠæ±ã®æ®ããæºããã®ã«ååãªæ°ãããšã³ããããŒããœãŒã¹ããåéãããŸã§åŸ æ©ããŸãã
䜿çšå Žé¢ïŒ ãã€ãŠã¯ãéåžžã«äŸ¡å€ã®é«ããé·æçãªæå·éµïŒGPGãã¹ã¿ãŒããŒãªã©ïŒãçæããéã«æšå¥šãããŠããŸãããããããã³ã°ããæ§è³ªãå®å šæ§ã®ä¿èšŒãšèŠãªãããŠããããã§ããããããããã«ãããšã³ããããŒãå°ãªãã·ã¹ãã ã§ã¯ã¢ããªã±ãŒã·ã§ã³ãæ°žä¹ ã«ãã³ã°ããå¯èœæ§ããããã»ãšãã©ã®çšéã«ã¯éçŸå®çã§ãã
/dev/urandomïŒé«æ§èœãœãŒã¹
`/dev/urandom`ïŒunlimited/unblocking randomïŒã¯ç°ãªãã¢ãããŒããåããŸãããšã³ããããŒããŒã«ã䜿çšããŠãé«åè³ªã§æå·è«çã«å®å šãªPRNG (CSPRNG) ãã·ãŒãããŸãããã®CSPRNGãååãªçã®ãšã³ããããŒã§äžåºŠã·ãŒãããããšãèšç®äžäºæž¬äžå¯èœãªããŒã¿ãéåžžã«é«éã«ãäºå®äžç¡éã«çæã§ããŸãã`/dev/urandom`ã¯æ±ºããŠãããã¯ããŸããã
䜿çšå Žé¢ïŒ 99.9%ã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§å©çšããŸãã`/dev/urandom`ãäœããã®åœ¢ã§å®å šã§ãªããšããé·å¹Žã®ç¥è©±ããããŸãããããã¯æä»£é ãã§ããçŸä»£ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒLinuxã«ãŒãã«2.6以éãªã©ïŒã§ã¯ãããŒã«ãåæåãããã°ïŒããã¯ããŒãããã»ã¹ã®éåžžã«æ©ã段éã§è¡ãããŸãïŒã`/dev/urandom`ã®åºåã¯ããããç®çã«ãããŠæå·è«çã«å®å šã§ãããšèŠãªãããŸããçŸä»£ã®æå·åŠããã³ã»ãã¥ãªãã£ã®å°éå®¶ã¯ãäŸå€ãªã`/dev/urandom`ãŸãã¯ããã«çžåœããã·ã¹ãã ã³ãŒã«ïŒLinuxã®`getrandom()`ãWindowsã®`CryptGenRandom()`ïŒã®äœ¿çšãæšå¥šããŠããŸãã
ãšã³ããããŒåéã«ããã課é¡ãšèæ ®äºé
çŸä»£ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãšã³ããããŒåéã«éåžžã«åªããŠããŸãããç¹å®ã®ã·ããªãªã§ã¯é倧ãªèª²é¡ãçããŸãã
ãã³ãŒã«ãã¹ã¿ãŒããåé¡
ããã€ã¹ãåããŠèµ·åãããšããäœãèµ·ããã§ããããïŒãšã³ããããŒããŒã«ã¯ç©ºã§ãããã¹ã¯ãããã³ã³ãã¥ãŒã¿ãŒã§ã¯ããŠãŒã¶ãŒãããã«ããŠã¹ãåããããã¿ã€ãã³ã°ãå§ãããããŠãããŒã«ã¯æ¥éã«æºããããŸããããããæ¬¡ã®ãããªå°é£ãªã±ãŒã¹ãèããŠã¿ãŠãã ããã
- ãããã¬ã¹ãµãŒããŒ: ããŒã¿ã»ã³ã¿ãŒå ã®ãµãŒããŒã«ã¯ããŒããŒããããŠã¹ãæ¥ç¶ãããŠããŸããããããã¯ãŒã¯ããã£ã¹ã¯ã®å²ã蟌ã¿ã®ã¿ã«äŸåããŸããããããã¯ãµãŒãã¹ãéå§ãããåã®ããŒãåææ®µéã§ã¯ãŸã°ããããããŸããã
- IoTããã³çµèŸŒã¿ããã€ã¹: ã¹ããŒããµãŒã¢ã¹ã¿ãããã»ã³ãµãŒã¯ããã£ã¹ã¯ããªãããããã¯ãŒã¯ãã©ãã£ãã¯ãæå°éã§ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ããªãããããšã³ããããŒã®æºæ³ãéåžžã«å°ãªãå¯èœæ§ããããŸãã
ãã®ãã³ãŒã«ãã¹ã¿ãŒããã¯å±éºã§ãããªããªãããµãŒãã¹ãããŒãããã»ã¹ã®æ©ã段éã§èµ·åãããšã³ããããŒããŒã«ãé©åã«ã·ãŒããããåã«ä¹±æ°ãèŠæ±ãããšãäºæž¬å¯èœãªåºåãåãåãå¯èœæ§ãããããã§ããããã軜æžãããããçŸä»£ã®ã·ã¹ãã ã§ã¯ã·ã£ããããŠã³æã«ååã®ã»ãã·ã§ã³ã®ãšã³ããããŒããŒã«ããã®ã©ã³ãã ããŒã¿ãå«ããã·ãŒããã¡ã€ã«ããä¿åããæ¬¡åã®ããŒãæã«ããŒã«ãåæåããããã«äœ¿çšããããšããããããŸãã
ä»®æ³åç°å¢ãšã¯ããŒã³ã·ã¹ãã
ä»®æ³åã¯ãšã³ããããŒã«é¢ãã倧ããªèª²é¡ããããããŸããä»®æ³ãã·ã³ (VM) ã¯ç©çããŒããŠã§ã¢ããéé¢ãããŠããããããã¹ãã®ãã£ã¹ã¯ã¿ã€ãã³ã°ããã®ä»ã®ããŒããŠã§ã¢å²ã蟌ã¿ãçŽæ¥èŠ³æž¬ããããšãã§ããŸãããããã«ãããè¯è³ªãªãšã³ããããŒãœãŒã¹ãæ¯æžããŸãã
ãã®åé¡ã¯ã¯ããŒã³äœæã«ãã£ãŠããã«æ·±å»ã«ãªããŸããVMãã³ãã¬ãŒããäœæãããããã100å°ã®æ°ããVMãå±éããå Žåã100å°ãã¹ãŠããšã³ããããŒããŒã«ã®ã·ãŒãã®ç¶æ ãå«ããå šãåãç¶æ ã§èµ·åããå¯èœæ§ããããŸãããããããããã¹ãŠååèµ·åæã«SSHãã¹ãããŒãçæããå Žåãå šãåãããŒãçæããŠããŸãå¯èœæ§ããããŸããããã¯å€§èŠæš¡ãªã»ãã¥ãªãã£è匱æ§ã§ãã
解決çã¯ã`virtio-rng`ã®ãããªæºä»®æ³åä¹±æ°çæåšã§ããããã¯ãã²ã¹ãVMããã¹ããããšã³ããããŒãèŠæ±ããããã®ãçŽæ¥çã§å®å šãªãã£ãã«ãäœæããŸãããã¹ãã¯ãã¹ãŠã®ç©çããŒããŠã§ã¢ã«ã¢ã¯ã»ã¹ã§ãããããè±å¯ãªãšã³ããããŒäŸçµŠæºãæã¡ãã²ã¹ãã«å®å šã«æäŸããããšãã§ããŸãã
ãšã³ããããŒæ¯æž
ãšã³ããããŒæ¯æžã¯ãã·ã¹ãã ã®ä¹±æ°ã«å¯ŸããéèŠããæ°ãããšã³ããããŒãåéããèœåãäžåã£ããšãã«çºçããŸããæ¯ç§äœåãã®TLSãã³ãã·ã§ã€ã¯ãåŠçããå€å¿ãªãŠã§ããµãŒããŒã¯ã乱鿧ãéåžžã«éãæ¶è²»ããå¯èœæ§ããããŸãããããã®ãµãŒããŒäžã®ã¢ããªã±ãŒã·ã§ã³ã`/dev/random`ã䜿çšããããã«èšå®ãããŠãããšããããã¯ãããã¯ãå§ããæ·±å»ãªããã©ãŒãã³ã¹äœäžãæ¥ç¶ã¿ã€ã ã¢ãŠãã«ã€ãªããå¯èœæ§ããããŸããããããã»ãšãã©ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§`/dev/urandom`ãæšå¥šãããã€ã³ã¿ãŒãã§ãŒã¹ã§ããäž»ãªçç±ã§ãã
ãã¹ããã©ã¯ãã£ã¹ãšææ°ã®è§£æ±ºç
ã·ã¹ãã ãšã³ããããŒã®ç®¡çã¯ãã·ã¹ãã 管çè ãDevOpsãšã³ãžãã¢ããããŠãœãããŠã§ã¢éçºè ã®å ±å責任ã§ãã
ã·ã¹ãã 管çè ãšDevOpsåã
- ããŒããŠã§ã¢RNGã®æŽ»çš: ããŒããŠã§ã¢ã«å èµã®HRNGïŒIntel RDRANDãªã©ïŒãããå Žåãã·ã¹ãã ãããã䜿çšããããã«èšå®ãããŠããããšã確èªããŠãã ãããLinuxã®`rng-tools`ã®ãããªããŒã«ãèšå®ããŠãããŒããŠã§ã¢çæåšããã®ããŒã¿ãã«ãŒãã«ã®`/dev/random`ããŒã«ã«çŽæ¥äŸçµŠããããšãã§ããŸãã
- ä»®æ³åãžã®å¯Ÿå¿: VMãå±éããéã¯ãåžžã«`virtio-rng`ããã€ã¹ãèšå®ãããæå¹ã«ãªã£ãŠããããšã確èªããŠãã ãããããã¯ãããããä»®æ³åã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãããéèŠãªã»ãã¥ãªãã£ã¹ãããã§ãã
- éå®çãªããã€ã¹ã§ã®ãšã³ããããŒããŒã¢ã³ã®æ€èš: ãããã¬ã¹ã·ã¹ãã ãèªç¶ãªãšã³ããããŒãœãŒã¹ãå°ãªãçµèŸŒã¿ããã€ã¹ã§ã¯ã`haveged`ã®ãããªãšã³ããããŒåéããŒã¢ã³ã圹ç«ã€ããšããããŸããããã¯ãããã»ããµã®åœä»€ã¿ã€ãã³ã°ã®å€åïŒCPUèªäœã®å®è¡ãžãã¿ãŒïŒãå©çšããŠãè£è¶³çãªãšã³ããããŒãçæããŸãã
- ãšã³ããããŒã¬ãã«ã®ç£èŠ: Linuxã§ã¯ã`cat /proc/sys/kernel/random/entropy_avail`ãå®è¡ããããšã§ãããŒã«å ã®çŸåšã®æšå®ãšã³ããããŒã確èªã§ããŸãããã®æ°å€ãäžè²«ããŠäœãå ŽåïŒäŸïŒ1000æªæºïŒãã·ã¹ãã ãæ¯æžããŠããå åã§ãããäžèšã®è§£æ±ºçã®ãããããå¿ èŠã«ãªãå¯èœæ§ããããŸãã
éçºè åã
- é©åãªã·ã¹ãã ã³ãŒã«ã®äœ¿çš: é»éåŸã¯ãã»ãã¥ãªãã£ç®çã§ç¬èªã®ä¹±æ°çæåšãå®è£ ããªãããšã§ããåžžã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®æå·ã©ã€ãã©ãªãæäŸããã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠãã ãããããã¯ãLinux/Cã§ã¯`getrandom()`ãPythonã§ã¯`os.urandom()`ãNode.jsã§ã¯`crypto.randomBytes()`ãJavaã§ã¯`SecureRandom`ã䜿çšããããšãæå³ããŸãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ããããã¯ããããšãªãæå·è«çã«å®å šãªä¹±æ°ãæäŸããããã«å°éçã«èšèšãããŠããŸãã
- `urandom`ãš`random`ã®éããçè§£ãã: ã»ãã·ã§ã³ããŒããã³ã¹ããœã«ãããããã¯äžæçãªæå·éµã®çæãªã©ãäºå®äžãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«ãããŠãéããããã³ã°ã®`/dev/urandom`ã€ã³ã¿ãŒãã§ãŒã¹ãæ£ããå®å šãªéžæã§ããããããã³ã°ã€ã³ã¿ãŒãã§ãŒã¹ãæ€èšããã®ã¯ãããå°æ°ã®éåžžã«äŸ¡å€ã®é«ããªãã©ã€ã³ã®ãã¹ã¿ãŒããŒãçæããå Žåã®ã¿ã§ããããã®å Žåã§ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãèªèããŠããå¿ èŠããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®PRNGãæ£ããã·ãŒããã: ã¢ããªã±ãŒã·ã§ã³ãéæå·è«çãªç®çïŒã²ãŒã ãã·ãã¥ã¬ãŒã·ã§ã³ãªã©ïŒã§ç¬èªã®PRNGãå¿ èŠãšããå Žåã§ããé«å質ãªå€ã§ã·ãŒãããå¿ èŠããããŸããæåã®æ¹æ³ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å®å šãªãœãŒã¹ïŒäŸïŒ`/dev/urandom`ïŒããåæã·ãŒããååŸããããšã§ãã
çµè«ïŒããžã¿ã«ç€ŸäŒã®ä¿¡é Œãæ¯ããéããªå®è·è
ãšã³ããããŒåéã¯ãçŸä»£ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãæã€æãæŽç·Žããããã€éèŠãªæ©èœã®äžã€ã§ããããã¯ç©çäžçãšããžã¿ã«äžçãç¹ãããã»ã¹ã§ããããããã¯ãŒã¯ãã±ããã®ãžãã¿ãŒãããŒã¹ãããŒã¯ã®èºèºãšãã£ãçŸå®ã®æ··æ²ãšãããã€ãºãã匷åãªæå·æè¡ãšããæ°åŠçãªç¢ºå®æ§ãžãšå€æããŸãã
ãã®ã»ãã¥ãªãã£ãæ¯ããèŠããããšã³ãžã³ã¯ãç§ãã¡ããªã³ã©ã€ã³ã§è¡ãã»ãŒãã¹ãŠã®å®å šãªå¯Ÿè©±ã®åºç€ãšãªããäžå¯æ¬ ãªäºæž¬äžèœæ§ã®èŠçŽ ãæäŸããããã«ãããã¯ã°ã©ãŠã³ãã§çµ¶ãéãªãåããŠããŸããåçŽãªãŠã§ããã©ãŠãžã³ã°ã»ãã·ã§ã³ã®ä¿è·ããåœå®¶æ©å¯ã®ä¿è·ã«è³ããŸã§ãã·ã¹ãã ãšã³ããããŒã®å質ãšå¯çšæ§ã¯æãéèŠã§ãããã®ä¹±éæ§ãã©ãããæ¥ãŠãã©ã®ããã«ç®¡çãããã©ã®ãããªèª²é¡ãããã®ããçè§£ããããšã§ãç§ãã¡ã¯ã°ããŒãã«ãªããžã¿ã«ç€ŸäŒã®ããã«ããå ç¢ã§ãå埩åããããä¿¡é Œã§ããã·ã¹ãã ãæ§ç¯ããããšãã§ããŸãã