ð² æå·åŠçä¹±æ°(æŽæ°)çæ
Web Crypto APIãšæ£åŽãµã³ããªã³ã°ã«ãããåãã®ãªãäžæ§ãªä¹±æ°ãçæããŸãã
çæäž...
æå°å€ãšæå€§å€ãæå®ãããšããã©ãŠã¶ã®Web Crypto API(æå·åŠçã«å®å šãªä¹±æ°çæåš)ã䜿ã£ãŠããã®ç¯å²å ã§åãã®ãªãäžæ§ãªä¹±æ°ã®æŽæ°ãçæããããŒã«ã§ããåçŽãªå°äœæŒç®(mod)ã«ããä¹±æ°çæã«ãããã¡ãªãå°äœãã€ã¢ã¹ãããæ£åŽãµã³ããªã³ã°(rejection sampling)ãšããææ³ã§åé¿ããŠããŸãã
äœ¿ãæ¹
- æå°å€ãšæå€§å€ãå ¥åããŸãã
- çæãããä¹±æ°ã®æŽæ°ãèªåçã«è¡šç€ºãããŸãã
- ãåçæããã¿ã³ã§æ°ããä¹±æ°ãçæã§ããŸãã
èšç®ã®ä»çµã¿
ãã®ããŒã«ã¯ãæå®ããç¯å²ïŒæå°å€ãæå€§å€ã䞡端ãå«ãïŒãããåãã®ãªãã©ã³ãã ãªæŽæ°ã1ã€éžã³ãŸããä¹±æ°ã«ã¯ããã©ãŠã¶ã®æå·åŠçã«å®å šãªä¹±æ°çæåšïŒcrypto.getRandomValuesïŒã䜿ã£ãŠããŸãã ç¯å²ã®å€§ããã衚ãã®ã«å¿ èŠãªãã€ãæ°ã ãä¹±æ°ãäœãããããç¯å²ã®å€§ããã§å²ã£ãäœãã«æå°å€ãè¶³ããŠçµæã«ããŸãããã ããåçŽã«äœããåããšãç¯å²ã«ãã£ãŠã¯å°ããæ°ããããã«åºããããªããŸãïŒã¢ãžã¥ããã€ã¢ã¹ïŒãããã§ãä¹±æ°ããç¯å²ã®å€§ããã®åæ°ãã®äžé以äžã«ãªã£ãå Žåã¯æšãŠãŠåŒãçŽãïŒæ£åŽãµã³ããªã³ã°ïŒãã©ã®æ°ãå®å šã«åã確çã§åºãããã«ããŠããŸãã 倧ããªç¯å²ã§ãæ£ç¢ºã«èšç®ã§ãããããå éšã§ã¯BigIntïŒä»»æã®å€§ããã®æŽæ°ïŒã§èšç®ããŠããŸãã
èšç®äŸ
ç¯å² 1ã6ïŒãµã€ã³ãïŒ 1ãã€ãïŒ0ã255ïŒã®ä¹±æ°ã䜿ããŸãã 256 ÷ 6 ïŒ 42äœã4 ãªã®ã§ã6 à 42 ïŒ 252 æªæºã®å€ã ãã䜿ãã252ã255ãåºããåŒãçŽããŸãã åãå ¥ããå€ Ã· 6 ã®äœã ïŒ 1 ãçµæã§ãã 6äžå詊ããšãåç®ãããããçŽ1äžåãã€åºãŸãïŒåãã®ãªãååžïŒã ç¯å²ã¯ãJavaScriptã§æ£ç¢ºã«è¡šããæŽæ°ïŒÂ±9,007,199,254,740,991ïŒãŸã§æå®ã§ããŸãã
䜿çšäžã®æ³šæ
- ããåŒããæœéžããã¹ã¯ãŒãã®äžéšãã²ãŒã ã®ä¹±æ°ãªã©ã«äœ¿ããŸãã
- å ¬éã®æœéžã§å ¬æ£ãã瀺ãããå Žåã¯ãä¹±æ°ã®äœãæ¹ãšçµæãèšé²ããŠãããšãåŸãã説æãããããªããŸãã
- ä¹±æ°ã¯ãã©ãŠã¶å ã§äœãããå€éšã«éä¿¡ãããããšã¯ãããŸããã
ãããã質å
å°äœãã€ã¢ã¹(ã¢ãžã¥ããã€ã¢ã¹)ãšã¯äœã§ãã?
ä¹±æ°ã®ãã€ãå€ãåçŽã«ç¯å²ã®æ°ã§å²ã£ãäœãã䜿ããšãç¯å²ã2ã®çޝä¹ã§ãªãå Žåã«äžéšã®å€ããããã«åºããããªãåããçããŸãããã®ããŒã«ã¯ãæ£åŽãµã³ããªã³ã°ããšããææ³ã§ãã®åããåé¿ããçã«äžæ§ãªä¹±æ°ãçæããŠããŸãã
Math.random()ãšã¯äœãéããŸãã?
Math.random()ã¯æå·åŠçãªå®å šæ§ãä¿èšŒãããŠããªãç䌌乱æ°çæåšã§ãããã®ããŒã«ã¯Web Crypto API(crypto.getRandomValues)ã䜿çšããŠãããæœéžãã»ãã¥ãªãã£ã«é¢ããçšéã«ããé©ããŠããŸãã
çæãããå€ã¯ã©ããã«éä¿¡ãããŸãã?
ãããããã¹ãŠã®åŠçã¯ãã©ãŠã¶å ã§å®çµããçæãããå€ããµãŒããŒã«éä¿¡ãããããšã¯ãããŸããã