Pythonã®æºååæå·ïŒHEïŒã«ããã圹å²ãæ¢æ±ããæå·åãããããŒã¿ã§ã®å®å šãªèšç®ãå¯èœã«ããŸããFHEãSHEããŠãŒã¹ã±ãŒã¹ã課é¡ãããã³ã°ããŒãã«ãªããŒã¿ãã©ã€ãã·ãŒã®ããã®å®è·µçãªæŽå¯ã«ã€ããŠåŠã³ãŸãã
Pythonæºååæå·ïŒå®å šãªã°ããŒãã«ãªæªæ¥ã®ããã«æå·åãããããŒã¿ã§ã®èšç®ãã¢ã³ããã¯ãã
ãŸããŸãçžäºæ¥ç¶ãé²ãäžçã«ãããŠãããŒã¿ã¯æã䟡å€ã®ããååãšãªããŸãããå人ã®å¥åº·èšé²ãéèååŒãããç¬èªã®ããžãã¹ã€ã³ããªãžã§ã³ã¹ãç»æçãªç§åŠç ç©¶ãŸã§ãèšå€§ãªéã®æ©å¯æ å ±ãæ¥ã çæãä¿åãåŠçãããŠããŸããäžçäžã®çµç¹ãã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ã人工ç¥èœã忣ããŒã¿ã¢ãŒããã¯ãã£ãæ¡çšããã«ã€ããŠãããŒã¿ã®åºæã®äŸ¡å€ãæœåºããªãããããŒã¿ãã©ã€ãã·ãŒãç¶æãããšãã課é¡ãæãéèŠã«ãªã£ãŠããŸããåŸæ¥ã®æå·åæ¹æ³ã¯ãä¿åæããã³è»¢éäžã®ããŒã¿ãä¿è·ããŸãããèšç®ãå®è¡ããåã«åŸ©å·åããå¿ èŠããããããŒã¿ãå ¬éããããè匱ãªç¬éããçããŸãã
ããã§ãæºååæå·ïŒHEïŒãç»å ŽããŸããããã¯ãæ©å¯ããŒã¿ã®åŠçæ¹æ³ã«é©åœãããããããšãçŽæããæå·åã®é©ç°ã§ããHEã䜿çšãããšãæå·åãããããŒã¿ã«å¯ŸããŠçŽæ¥èšç®ãå®è¡ã§ããæå·åãããçµæãåŸãããŸãã埩å·åãããšãæå·åãããŠããªãããŒã¿ã«å¯ŸããŠåãèšç®ãå®è¡ããçµæãšåäžã«ãªããŸããæ©å¯ã®è²¡åããŒã¿ãã¯ã©ãŠããµãŒãã¹ã«éä¿¡ããäžæ£æ€åºãåžå Žãã¬ã³ãã®åæãåããæå·åãããçµæãåãåãããšãæ³åããŠã¿ãŠãã ãããã¯ã©ãŠããããã€ããŒãçã®æ å ±ãç®ã«ããããšã¯ãããŸããããããæºååæå·ã®å€é©åã§ãã
å€ãã®å Žåãé«åºŠãªæå·åã®éåžžã«è€éã§é£è§£ãªåéãšèŠãªãããŠããŸãããPythonã¯ãã®ãã¯ãããžãŒãžã®åŒ·åã§ã¢ã¯ã»ã¹å¯èœãªã²ãŒããŠã§ã€ãšããŠæ¥éã«å°é ããŠããŸããè±å¯ãªã©ã€ãã©ãªã®ãšã³ã·ã¹ãã ã䜿ããããã匷åãªã³ãã¥ããã£ãµããŒãã«ãããæºååæå·ã¯äžçäžã®éçºè ãç ç©¶è ãçµç¹ã«ãšã£ãŠãã身è¿ãªãã®ã«ãªã£ãŠããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãæºååæå·ã®è€éããæãäžãããã®æ·±é ãªæå³åããæ¢æ±ããããŸããŸãªåœ¢åŒãåæããPythonã®éèŠãªåœ¹å²ã匷調ããå®è·µçãªæŽå¯ãæäŸãããã®ç»æçãªãã¯ãããžãŒã®ä»åŸã®éçãæŠèª¬ããŸãã
æºååæå·ãšã¯ïŒäžæ žãšãªãæŠå¿µ
æºååæå·ãçã«çè§£ããã«ã¯ããŸãåŸæ¥ã®æå·åã®éçãèæ ®ããŸããããAESãRSAãªã©ã®æ¹æ³ã䜿çšããŠããŒã¿ãæå·åãããšãããŒã¿ã¯çè§£äžèœãªæå·æã«ãªããŸãããã®ããŒã¿ã«å¯ŸããŠã2ã€ã®æ°å€ãå ç®ããããããŒã¯ãŒããæ€çŽ¢ããããè€éãªæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãå®è¡ããããããªã©ãäœããã®æäœãå®è¡ããå Žåã¯ããŸã埩å·åããå¿ èŠããããŸãããã®åŸ©å·åããã»ã¹ã«ãããå¹³æããŒã¿ãå ¬éãããç¹ã«æäœããµãŒãããŒãã£ã®ã¯ã©ãŠããããã€ããŒãä¿¡é Œã§ããªãç°å¢ã«ã¢ãŠããœãŒã·ã³ã°ãããå Žåã«ãæœåšçãªäŸµå®³ç¹ãçºçããŸãã
æºååæå·ïŒHEïŒã¯ããã®ãã©ãã€ã ãæ ¹æ¬çã«å€ããŸãããæºååããšããçšèªã¯ãæ§é ãä¿æãããããã³ã°ãæå³ããã®ãªã·ã£èªã®ãhomosãïŒåãïŒãšãmorpheãïŒåœ¢ïŒã«ç±æ¥ããŸããæå·åã§ã¯ãããã¯æå·æã«å¯ŸããŠå®è¡ãããç¹å®ã®æ°åŠæŒç®ããåºç€ãšãªãå¹³æã«å¯ŸããŠå®è¡ãããåãæŒç®ã«çŽæ¥å¯Ÿå¿ããããšãæå³ããŸããæå·æã«å¯Ÿãããããã®æäœã®çµæã¯æå·åããããŸãŸã§ãããæ£ãã埩å·åããŒãæã€äººã®ã¿ãçã®çµæãæããã«ã§ããŸãã
次ã®ããã«èããŠãã ããã
- ãéæ³ã®ç®±ãã®äŸãïŒæ©å¯ã¢ã€ãã ãå ¥ã£ãããã¯ãããç®±ïŒæå·åãããããŒã¿ïŒããããšæ³åããŠãã ãããããªãã¯ãäœæ¥è ã«ãããã®ã¢ã€ãã ã«å¯ŸããŠã¿ã¹ã¯ãå®è¡ããŠãããããã®ã§ãããäžèº«ãèŠãããããããŸãããHEã䜿çšãããšãäœæ¥è ã«ç¹å¥ãªãéæ³ã®æè¢ãïŒæºååæå·åã¹ããŒã ïŒãäžããç®±ãéããã«*ããã¯ãããç®±ã®äž*ã§ã¢ã€ãã ãæäœã§ããããã«ããŸããäœæ¥ãå®äºãããšãç®±ãããªãã«è¿åŽããããªãã ããããŒã䜿çšããŠç®±ãéããŠäœæ¥ã®çµæã確èªã§ããŸããã¢ã€ãã ã¯æ±ºããŠå ¬éãããŸããã§ããã
ãã®æ©èœã¯ãèšç®ãããŒã¿å ¬éããåãé¢ããããç»æçã§ããããŒã¿ã¯ãä¿åããã³è»¢éããåŠçãŸã§ãã©ã€ããµã€ã¯ã«å šäœã§æå·åããããŸãŸã«ã§ããããããã©ã€ãã·ãŒãšã»ãã¥ãªãã£ã®ä¿èšŒãå€§å¹ ã«åŒ·åãããŸããè€æ°ã®åœäºè ãåã ã®è²¢ç®ãæããã«ããããšãªãæ©å¯ããŒã¿ã§å ±åäœæ¥ãè¡ãå¿ èŠãããã·ããªãªããã¯ã©ãŠããããã€ããŒãå¹³æã§ã¯ã©ã€ã¢ã³ãããŒã¿ã«ã¢ã¯ã»ã¹ããããšãªãé«åºŠãªãµãŒãã¹ãæäŸããå¿ èŠãããã·ããªãªã«ãšã£ãŠãããã¯éèŠãªã€ããŒãã©ãŒã§ãã
æºååæå·ã¹ããŒã ã®å€æ§ãªç¶æ³
æºååæå·ã¯åäžã®ã¢ã«ãŽãªãºã ã§ã¯ãªããããããç°ãªãæ©èœãããã©ãŒãã³ã¹ç¹æ§ãæç床ã¬ãã«ãæã€æå·åã¹ããŒã ã®ãã¡ããªãŒã§ãããããã¯ã倧ãã3ã€ã®ã¿ã€ãã«åé¡ãããŸãã
1. éšåæºååæå·ïŒPHEïŒ
PHEã¹ããŒã ã§ã¯ãæå·åãããããŒã¿ã«å¯ŸããŠç¹å®ã®ã¿ã€ãã®èšç®ãç¡å¶éã«å®è¡ã§ããŸããããšãã°ãæå·åã¹ããŒã ã§ã¯ãæå·æã«å¯Ÿããç¡éã®å ç®ããŸãã¯ç¡éã®ä¹ç®ã¯èš±å¯ãããããäž¡æ¹ã¯èš±å¯ãããªãå ŽåããããŸããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯åŒ·åã§ããããã®æ©èœãå¶éãããŠãããããäžè¬çãªé©çšæ§ãå¶éãããŸãã
- äŸïŒ
- RSAïŒä¹ç®ïŒç¹ã«ãã¢ãžã¥ã©ãŒä¹ç®ïŒã«é¢ããŠæºååã§ããHEçšã«èšèšãããŠããŸãããããã®ä¹æ³ç¹æ§ã¯æ³šç®ã«å€ããŸãã
- ElGamalïŒä¹ç®ã«é¢ããŠæºååã§ãã
- PaillierïŒå ç®ã«é¢ããŠæºååã§ããããã¯ãå®å šãªåèšãå¹³åããŸãã¯ã¹ã«ã©ãŒç©ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«äžè¬çãªéžæè¢ã§ãããé»åæç¥šãŸãã¯éèšçµ±èšã§ãã䜿çšãããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒå®å šãªæç¥šãçµ±èšã®æå·åãããåèšãŸãã¯å¹³åã®èšç®ã1ã€ã®ã¿ã€ãã®æäœã®ã¿ãå¿ èŠãªåçŽãªéèšã¿ã¹ã¯ã
2. æºååæå·ïŒSHEïŒ
SHEã¹ããŒã ã§ã¯ãæå·åãããããŒã¿ã«å¯ŸããŠå ç®ãšä¹ç®ã®éãããæ°ãå®è¡ã§ããŸããããã¯ãå€é åŒæ·±åºŠåè·¯ïŒå ç®ãšä¹ç®ã®çµã¿åããïŒãå®è¡ã§ããŸãããäžå®ã®è€éããŸãã¯ã深床ããŸã§ã®ã¿ã§ããããšãæå³ããŸãããã®æ·±åºŠã«éãããšãæå·æã«åºæã®ãã€ãºãèç©ããã埩å·åãäžå¯èœã«ãªããã誀ã£ãçµæãçæãããŸãã
- ãã¬ãŒã¯ã¹ã«ãŒïŒ2009幎ã®ã¯ã¬ã€ã°ã»ãžã§ã³ããªãŒã®ç»æçãªç ç©¶ã§ã¯ãããŒãã¹ãã©ããã«åºã¥ãå®å šæºååæå·ã¹ããŒã ã®æåã®æ§ç¯ãå®èšŒãããŸãããããŒãã¹ãã©ããã®åã«ããã®ãããªã¹ããŒã ã¯ãæºååããšèŠãªãããŸãã
- ãã€ãºç®¡çïŒSHEã¹ããŒã ã«ã¯éåžžãæå·åäžã«è¿œå ãããããã€ãºãã³ã³ããŒãã³ããå«ãŸããŠãããæºååæäœããšã«å¢å ããŸãããã®ãã€ãºã¯ãæ£ãã埩å·åã®ããã«ç¹å®ã®ãããå€ãäžåã£ãŠããå¿ èŠããããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒç¹å®ã®ããŒã¿ããŒã¹ã¯ãšãªãåçŽãªæ©æ¢°åŠç¿ã¢ãã«ïŒç·åœ¢ååž°ãªã©ïŒããŸãã¯ä»»æã®å路深床ãå¿ èŠãšããªãæå·åãããã³ã«ãªã©ãæ¢ç¥ã®éãããè€éããæã€ç¹å®ã®èšç®ã«æé©ã§ãã
3. å®å šæºååæå·ïŒFHEïŒ
FHEã¯ãæºååæå·ã®èæ¯ã§ããæå·åãããããŒã¿ã«å¯ŸããŠå ç®ãšä¹ç®ã®äž¡æ¹ãç¡å¶éã«å®è¡ã§ãããããæå·åãããæ å ±ã埩å·åããã«ãä»»æã®é¢æ°ãèšç®ã§ããŸããããã«ãããå®è³ªçã«ããããèšç®ã¿ã¹ã¯ã«å¯ŸããŠåäŸã®ãªããã©ã€ãã·ãŒä¿èšŒãæäŸãããŸãã
- ããŒãã¹ãã©ããïŒSHEãFHEã«å€æããäž»èŠãªã€ãããŒã·ã§ã³ã¯ããããŒãã¹ãã©ãããã§ããããã¯ãæå·åã¹ããŒã ãç¬èªã®åŸ©å·ååè·¯ãæºååã§æå·åããããã䜿çšããŠãã€ãºã®å€ãæå·æããæŽæ°ãããããŒã¿ã埩å·åããã«ãã€ãºã广çã«äœæžã§ããè€éãªããã»ã¹ã§ããããã«ãããæå·æã®å¯¿åœãå»¶ã³ãç¡éã®æäœãå¯èœã«ãªããŸãã
- äž»ãªã¹ããŒã ïŒ
- BFV/BGVïŒBrakerski-Fan-Vercauteren / Brakerski-Gentry-VaikuntanathanïŒïŒæ£ç¢ºãªç®è¡æŒç®ã«ãã䜿çšãããæŽæ°ããŒã¹ã®ã¹ããŒã ãéåžžãçŽ æ°ãæ³ãšããæŽæ°ã§åäœããŸãã
- CKKSïŒCheon-Kim-Kim-SongïŒïŒå®æ°ãŸãã¯è€çŽ æ°ã§ã®è¿äŒŒç®è¡æŒç®çšã«èšèšãããã¹ããŒã ãããã«ãããããããªç²ŸåºŠã®æå€±ã蚱容ãããæ©æ¢°åŠç¿ãä¿¡å·åŠçãçµ±èšåæãªã©ãæµ®åå°æ°ç¹æ°ãå«ãã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«é©ããŠããŸãã
- TFHEïŒToroidal FHEïŒïŒå¹ççãªããŒãã¹ãã©ããã§ç¥ãããTFHEã¯ãããã§åäœããããŒã«åè·¯ãŸãã¯ç¹å®ã®è«çæäœã«ãã䜿çšãããŸãã
- ãŠãŒã¹ã±ãŒã¹ïŒã¯ã©ãŠãããŒã¹ã®AIããã³æ©æ¢°åŠç¿ãå®å šãªã²ãã åæããã©ã€ãã·ãŒãä¿è·ãã財åã¢ããªã³ã°ãæ©å¯æ§ã®é«ãæ¿åºããŒã¿åŠçãããã³æå·åãããããŒã¿ã«å¯Ÿããè€éã§ç¡å¶éã®èšç®ãå¿ èŠãšããã·ããªãªã
FHEã®éçºã¯ãæå·åã«ãããèšå¿µç¢çãªææã§ãããçè«çãªå¯èœæ§ããå®çšçãªå®è£ ãžãšç§»è¡ããŸããããããã©ãŒãã³ã¹ã«é¢ãã課é¡ã¯äŸç¶ãšããŠæ®ã£ãŠããŸãã
ãçç±ãïŒèª¬åŸåã®ãããŠãŒã¹ã±ãŒã¹ãšã°ããŒãã«ãªã¡ãªãã
æå·åãããããŒã¿ã§èšç®ã§ããèœåã¯ã仿¥ã®æãå«ç·ã®ããŒã¿ãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ã®èª²é¡ã«å¯ŸåŠããäžçäžã®å€ãã®åéã§å€é©çãªã¡ãªãããæäŸããŸãã
1. 匷åãããã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ã»ãã¥ãªãã£
- 課é¡ïŒã¯ã©ãŠãã®æ¡çšã¯åºãŸã£ãŠããŸãããããŒã¿ãã©ã€ãã·ãŒãšãã³ããŒã«ããæ©å¯æ å ±ãžã®ã¢ã¯ã»ã¹ã«é¢ããæžå¿µãäŸç¶ãšããŠæ®ã£ãŠããŸããäŒæ¥ã¯ãã¯ã©ãŠããããã€ããŒã確èªã§ããå Žåãæ©å¯æ§ã®é«ãããŒã¿ãã¢ããããŒãããããšãèºèºããŸãã
- 解決çïŒHEã䜿çšãããšãã¯ã©ãŠããµãŒãã¹ã¯ãã¯ã©ã€ã¢ã³ãããŒã¿ã埩å·åããã«ãã¯ã©ã€ã¢ã³ãããŒã¿ã«å¯ŸããŠèšç®ïŒããŒã¿åæãããŒã¿ããŒã¹ã¯ãšãªããªãœãŒã¹æé©åãªã©ïŒãå®è¡ã§ããŸããã¯ã©ã€ã¢ã³ãã¯å®å šãªå¶åŸ¡ãšãã©ã€ãã·ãŒãä¿æããªãããã¯ã©ãŠãã®ã¹ã±ãŒã©ããªãã£ãšè²»çšå¯Ÿå¹æã掻çšã§ããŸããããã¯ã峿 ŒãªããŒã¿æåšå°ããã³ãã©ã€ãã·ãŒæ³ãæã€ããŸããŸãªåœã®é«åºŠã«èŠå¶ãããæ¥çã«ãšã£ãŠç¹ã«é åçã§ãã
2. ãã©ã€ãã·ãŒãä¿è·ããæ©æ¢°åŠç¿ãšAI
- 課é¡ïŒåŒ·åãªAIã¢ãã«ããã¬ãŒãã³ã°ããã«ã¯ãå€ãã®å Žåãæ©å¯æ§ã®é«ãå人æ å ±ãŸãã¯å°ææ å ±ãå«ãèšå€§ãªããŒã¿ã»ãããå¿ èŠã§ãããããã®ããŒã¿ã»ãããå ±æããããã¯ã©ãŠãããŒã¹ã®MLãµãŒãã¹ã«éä¿¡ããããããšãé倧ãªãã©ã€ãã·ãŒåé¡ãçºçããŸãã
- 解決çïŒHEã䜿çšãããšãæå·åãããããŒã¿ïŒãã©ã€ããŒããã¬ãŒãã³ã°ïŒã§æ©æ¢°åŠç¿ã¢ãã«ããã¬ãŒãã³ã°ããããæå·åããããŠãŒã¶ãŒã¯ãšãªã«å¯ŸããŠæšè«ïŒãã©ã€ããŒãæšè«ïŒãå®è¡ãããã§ããŸããããã¯ããšãŒãããã®ç é¢ããå人ã®ãã©ã€ãã·ãŒãŸãã¯GDPRã«éåããããšãªããã°ããŒãã«ãªå»çææãæ¹åããããã«ãæå·åãããããããã®æ£è ããŒã¿ã䜿çšããŠã¢ãžã¢ã®å¥ã®ç é¢ãšå ±åã§èšºæAIã¢ãã«ããã¬ãŒãã³ã°ã§ããããšãæå³ããŸããäŒæ¥ã¯ããŠãŒã¶ãŒå ¥åã®ãã©ã€ãã·ãŒãä¿èšŒããAIãµãŒãã¹ãæäŸã§ããŸãã
3. å®å šãªã²ãã ããã³å»çããŒã¿åæ
- 課é¡ïŒã²ãã ããŒã¿ã¯éåžžã«æ©å¯æ§ãé«ããçŸæ£ãžã®çŽ å ãæããã«ããå¯èœæ§ã®ããéåžžã«å人çãªæ å ±ãå«ãŸããŠããŸããç ç©¶ã§ã¯ãå€ãã®å ŽåãããŸããŸãªæ©é¢ãŸãã¯åœã«ãããå€§èŠæš¡ãªã²ãã ããŒã¿ã³ããŒããåæããå¿ èŠããããŸãã
- 解決çïŒHEã¯ãå®å šãªå ±åã²ãã ç ç©¶ãä¿é²ããŸããç ç©¶è ã¯ãããŸããŸãªãœãŒã¹ããæå·åãããã²ãã ããŒã¿ã»ãããããŒã«ããè€éãªçµ±èšåæãå®è¡ããŠçŸæ£ããŒã«ãŒãŸãã¯åµè¬ã¿ãŒã²ãããç¹å®ããéçŽããããã©ã€ãã·ãŒä¿è·ã®çµæã®ã¿ã埩å·åã§ããŸããããã«ãããäžçäžã®æ£è ã®æ©å¯æ§ãå³å¯ã«ä¿è·ããªãããå»åŠã®ãã¬ãŒã¯ã¹ã«ãŒãå éãããŸãã
4. éèãµãŒãã¹ãšäžæ£æ€åº
- 課é¡ïŒéèæ©é¢ã¯ãäžæ£ãæ€åºããä¿¡çšãªã¹ã¯ãè©äŸ¡ããèŠå¶ãéµå®ããå¿ èŠããããŸããå€ãã®å Žåãæ©å¯æ§ã®é«ã顧客ååŒããŒã¿ãåæããå¿ èŠããããŸããéè¡éãŸãã¯ãµãŒãããŒãã£ã®åæäŒç€Ÿãšã®éã§ãã®ããŒã¿ãå ±æãããšããã©ã€ãã·ãŒãšç«¶äºäžã®ãªã¹ã¯ã䌎ããŸãã
- 解決çïŒHEã䜿çšãããšãéè¡ã¯æå·åããããã©ã³ã¶ã¯ã·ã§ã³ãã¿ãŒã³ãå ±æããŠäžæ£æ€åºã§å ±åäœæ¥ãè¡ãããšãã§ããåã ã®é¡§å®¢ããŒã¿ãæããã«ããããšãªãããããã¯ãŒã¯å šäœã§äžæ£è¡çºããã广çã«ç¹å®ã§ããŸãããŸããå®å šãªä¿¡çšã¹ã³ã¢ãªã³ã°ã«ã䜿çšã§ãã貞ãæã¯æå·åããã財åå±¥æŽã«åºã¥ããŠãªã¹ã¯ãè©äŸ¡ã§ããŸãã
5. æ¿åºããã³é²è¡ã¢ããªã±ãŒã·ã§ã³
- 課é¡ïŒæ¿åºããã³é²è¡æ©é¢ã¯ãæãæ©å¯æ§ã®é«ãæ©å¯ããŒã¿ãæ±ããŸããã€ã³ããªãžã§ã³ã¹ã®å ±åäœæ¥ãã·ãã¥ã¬ãŒã·ã§ã³ã®å®è¡ããŸãã¯éèŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ããŒã¿ã®åæã§ã¯ãå€ãã®å Žåãå®å šã«ä¿¡é ŒãããŠããªãç°å¢ã§ããŸãã¯æ©é¢éã§å ±æãããŠãããã®æ å ±ãåŠçããå¿ èŠããããŸãã
- 解決çïŒHEã¯ããããã®éèŠãªã»ã¯ã¿ãŒã§å®å šãªããŒã¿åŠçãè¡ãããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸããããã«ãããæ©å¯æ å ±ã®å®å šãªãã«ãããŒãã£åæãå¯èœã«ãªããããŸããŸãªæ©é¢ãŸãã¯åçåœãæå·åãããããŒã¿ã»ãããæŠç¥çæŽå¯ã®ããã«çµã¿åãããããšãã§ãããœãŒã¹ããŒã¿ãæãªãããšã¯ãããŸããã
6. ããŒã¿ã®åçåãšå®å šãªããŒã¿å ±æ
- 課é¡ïŒå€ãã®çµç¹ã¯è²ŽéãªããŒã¿ã»ãããææããŠããŸããããã©ã€ãã·ãŒã«é¢ããæžå¿µãŸãã¯èŠå¶äžã®å¶éã®ããã«ã忥åã§ããŸããã
- 解決çïŒHEã¯ããµãŒãããŒãã£ãæå·åãããããŒã¿ã»ããã«å¯ŸããŠåæãå®è¡ããçã®ããŒã¿ã«ã¢ã¯ã»ã¹ããããšãªããåŸãããæŽå¯ã«å¯ŸããŠæ¯æããè¡ãããšãèš±å¯ããããšã«ãããããŒã¿ãå®å šã«åçåããæ¹æ³ãæäŸããŸããããã«ãããGDPRãCCPAãªã©ã®å³æ Œãªã°ããŒãã«ããŒã¿ä¿è·èŠå¶ãéµå®ããªãããæ°ããåçæºãéãããŸãã
æºååæå·ã®æ°äž»åã«ãããPythonã®åœ¹å²
æºååæå·ã®ãããªè€éãªãã¯ãããžãŒãåºãæ¡çšãããã«ã¯ãããå€ãã®éçºè ãç ç©¶è ãã¢ã¯ã»ã¹ã§ããå¿ èŠããããŸããããã§ãã·ã³ãã«ããèªã¿ããããç§åŠããã³ããŒã¿ãµã€ãšã³ã¹ã©ã€ãã©ãªã®åºå€§ãªãšã³ã·ã¹ãã ã§å®è©ã®ããPythonãéèŠãªåœ¹å²ãæãããŸãã
åºç€ãšãªãHEã¹ããŒã ã¯ãå€ãã®å Žåãé床ãæé©åããããã«C++ã®ãããªé«æ§èœèšèªã§å®è£ ãããŠããŸãããPythonã¯ãæå·åã®è€éãã®å€ããæœè±¡åããããŠãŒã¶ãŒãã¬ã³ããªãŒãªã©ãããŒãšé«ã¬ãã«ã®ã©ã€ãã©ãªãæäŸããŸããããã«ãããéçºè ã¯ãæ ŒåããŒã¹ã®æå·åãæ·±ãçè§£ããªããŠããHEãœãªã¥ãŒã·ã§ã³ã詊ãããããããã¿ã€ããäœæãããããããã€ãããã§ããŸãã
PythonãHEã®äžå¿ã«ãªãã€ã€ããäž»ãªçç±ïŒ
- 䜿ãããããšè¿ éãªãããã¿ã€ãäœæïŒPythonã®æ§æã¯çŽæçã§ãããããéçºè ã¯æŠå¿µããã°ããææ¡ããæŠå¿µå®èšŒãå®è£ ã§ããŸãã
- è±å¯ãªãšã³ã·ã¹ãã ïŒNumPyãPandasãPyTorchãªã©ã®äžè¬çãªããŒã¿ãµã€ãšã³ã¹ã©ã€ãã©ãªãšã®çµ±åã«ãããHEã³ã³ããã¹ãå ã§ã®ããŒã¿ã®ååŠçãåæãããã³æ©æ¢°åŠç¿ã¯ãŒã¯ãããŒã容æã«ãªããŸãã
- ã³ãã¥ããã£ãšãªãœãŒã¹ïŒå€§èŠæš¡ãªã°ããŒãã«éçºè ã³ãã¥ããã£ã¯ãHEãåŠç¿ããã³å®è£ ãã人ã ã«ååãªãã¥ãŒããªã¢ã«ãããã¥ã¡ã³ããããã³ãµããŒããæäŸããããšãæå³ããŸãã
- æè²ãšç ç©¶ïŒPythonã®ã¢ã¯ã»ã·ããªãã£ã«ãããHEã®æè²ãšç ç©¶ã«æé©ãªèšèªãšãªããæ¬¡äžä»£ã®æå·åŠè ãšãã©ã€ãã·ãŒãæèãããšã³ãžãã¢ãè²æãããŸãã
æºååæå·çšã®äž»èŠãªPythonã©ã€ãã©ãª
ããã€ãã®ã©ã€ãã©ãªãPythonã§HEã«ã¢ã¯ã»ã¹ã§ããããã«ããŠããŸãã
- TenSEALïŒOpenMinedã«ãã£ãŠéçºãããTenSEALã¯ãMicrosoftã®SEALïŒSimple Encrypted Arithmetic LibraryïŒC++ã©ã€ãã©ãªãåºã«æ§ç¯ãããPythonã©ã€ãã©ãªã§ããBFVããã³CKKS FHEã¹ããŒã ãæäœããããã®äŸ¿å©ãªAPIãæäŸããPyTorchããã³NumPyæäœãšã·ãŒã ã¬ã¹ã«çµ±åããããšã§ããã©ã€ãã·ãŒãä¿è·ããæ©æ¢°åŠç¿ã¿ã¹ã¯ã«ç¹ã«é©ããŠããŸãã
- PyfhelïŒPython for Homomorphic Encryption LibraryïŒPyfhelïŒã¯ãã1ã€ã®äžè¬çãªéžæè¢ã§ãããPALISADE C++ã©ã€ãã©ãªã®å ç¢ãªã©ãããŒãæäŸããŸããBFVããã³CKKSã¹ããŒã ããµããŒãããå æ¬çãªæäœã»ãããæäŸããæ©æ¢°åŠç¿ä»¥å€ã®ããŸããŸãªHEã¢ããªã±ãŒã·ã§ã³ã«æ±çšæ§ããããããŸãã
- Concrete-MLïŒZamaã®Concrete-MLã¯ãç¹ã«æ©æ¢°åŠç¿çšã®FHEã«çŠç¹ãåœãŠãŠããŸããåŸæ¥ã®æ©æ¢°åŠç¿ã¢ãã«ïŒscikit-learnãPyTorchã¢ãã«ãªã©ïŒãå®å šæºåååçç©ã«ã³ã³ãã€ã«ããããã«èšèšãããŠãããConcrete FHEã©ã€ãã©ãªã掻çšããŠããŸãã
- PySyftïŒç¯å²ã¯ããåºãã§ããïŒé£ååŠç¿ãå·®åãã©ã€ãã·ãŒãããã³MPCã«çŠç¹ãåœãŠãŠããŸãïŒãPySyftïŒOpenMinedãããïŒã«ã¯FHEã®ã³ã³ããŒãã³ããå«ãŸããŠãããå€ãã®å ŽåãTenSEALãªã©ã®ã©ã€ãã©ãªãšçµ±åããŠãå®å šãªãã©ã€ãã·ãŒãä¿è·ããAIãã¬ãŒã ã¯ãŒã¯ãæäŸããŸãã
ãããã®ã©ã€ãã©ãªã¯ãäžçäžã®éçºè ã®åå ¥éå£ãå€§å¹ ã«äžããäœã¬ãã«ã®æå·åã®å°éå®¶ã«ãªãå¿ èŠãªããæŽç·Žãããæå·åæè¡ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åã§ããããã«ããŸãã
å®è·µçãªäŸïŒPythonã§æå·åãããå¹³åãå®å šã«èšç®ããïŒæŠå¿µçïŒ
äžè¬çãªã·ããªãªã䜿çšããŠãæºååæå·ã®åºæ¬çãªæµãã説æããŸããããäžé£ã®æ©å¯æ°å€ïŒããšãã°ãããŒã«ãããåºéãžã®åã ã®è²¡åè²¢ç®ïŒã®å¹³åããèšç®ãµãŒããŒã«åã ã®å€ãæããã«ããããšãªãèšç®ããŸããTenSEALãPyfhelãªã©ã®ã©ã€ãã©ãªã䜿çšããå Žåãšåæ§ã«ãæŠå¿µçãªPythonã¢ãããŒãã䜿çšããŸãã
ã·ããªãªïŒã°ããŒãã«ã³ã³ãœãŒã·ã¢ã ã¯ãåã ã®è²¢ç®ãåŠç¿ããäžå€®ãšã³ãã£ãã£ãªãã«ãã¡ã³ããŒã®å¹³åè²¢ç®ãèšç®ããããšèããŠããŸãã
1. ã»ããã¢ãããšããŒçæïŒã¯ã©ã€ã¢ã³ãåŽïŒ
ã¯ã©ã€ã¢ã³ãïŒãŸãã¯æå®ãããä¿¡é Œã§ãããšã³ãã£ãã£ïŒã¯ãå¿ èŠãªæå·åããŒãçæããŸããæå·åçšã®å ¬éããŒãšåŸ©å·åçšã®ç§å¯ããŒã§ãããã®ç§å¯ããŒã¯ç§å¯ã«ããŠããå¿ èŠããããŸãã
import tenseal as ts
# --- Client Side ---
# 1. Setup CKKS context for approximate arithmetic
# (suitable for averages which might involve floating point results)
# parameters: polynomial modulus degree, coefficient modulus (bit sizes),
# and global scale for CKKS fixed-point encoding
poly_mod_degree = 8192
coeff_mod_bit_sizes = [60, 40, 40, 60] # example bit sizes for coefficient moduli
scale = 2**40 # or ts.global_scale(poly_mod_degree) in some cases
context = ts.context(
ts.SCHEME_TYPE.CKKS,
poly_mod_degree=poly_mod_degree,
coeff_mod_bit_sizes=coeff_mod_bit_sizes
)
context.generate_galois_keys()
context.global_scale = scale
# Save the public and secret keys (and context) for demonstration purposes.
# In a real scenario, the public key is sent to the server, secret key kept by client.
secret_context = context.copy()
secret_context.make_context_public()
# The public context is what the server receives
public_context = context.copy()
public_context.make_context_public()
print("Client: CKKS Context and keys generated.")
2. ããŒã¿æå·åïŒã¯ã©ã€ã¢ã³ãåŽïŒ
åã¡ã³ããŒã¯ãå ¬éããŒïŒãŸãã¯å ¬éã³ã³ããã¹ãïŒã䜿çšããŠåã ã®è²¢ç®ãæå·åããŸãã
# --- Client Side (each member) ---
# Example individual contributions
contributions = [150.75, 200.50, 125.25, 180.00, 210.00]
encrypted_contributions = []
for value in contributions:
# Encrypt each individual value using the public context
enc_value = ts.ckks_vector(public_context, [value])
encrypted_contributions.append(enc_value)
print(f"Client: Encrypted {len(contributions)} contributions.")
# These encrypted_contributions are sent to the server
3. æå·åãããããŒã¿ã®èšç®ïŒãµãŒããŒåŽïŒ
ãµãŒããŒã¯æå·åãããè²¢ç®ãåãåããŸãã埩å·åããã«ããããã®æå·æã«å¯ŸããŠçŽæ¥æºååæŒç®ïŒåèšãé€ç®ïŒãå®è¡ã§ããŸãã
# --- Server Side ---
# Server receives public_context and encrypted_contributions
# (Server would not have access to the secret_context)
# Initialize encrypted sum with the first encrypted contribution
encrypted_sum = encrypted_contributions[0]
# Homomorphically add the remaining encrypted contributions
for i in range(1, len(encrypted_contributions)):
encrypted_sum += encrypted_contributions[i] # This is a homomorphic addition
# Homomorphically divide by the count of contributions to get the average
count = len(contributions)
encrypted_average = encrypted_sum / count # This is a homomorphic division/scalar multiplication
print("Server: Performed homomorphic summation and division on encrypted data.")
# The server sends encrypted_average back to the client
4. çµæã®åŸ©å·åïŒã¯ã©ã€ã¢ã³ãåŽïŒ
ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒããæå·åãããå¹³åãåãåããç§å¯ããŒã䜿çšããŠåŸ©å·åããŸãã
# --- Client Side ---
# Client receives encrypted_average from the server
# Decrypt the final result using the secret context
decrypted_average = encrypted_average.decrypt(secret_context)[0]
print(f"Client: Decrypted average is: {decrypted_average:.2f}")
# For comparison: calculate plaintext average
plaintext_average = sum(contributions) / len(contributions)
print(f"Client: Plaintext average is: {plaintext_average:.2f}")
# Verify accuracy
accuracy_check = abs(decrypted_average - plaintext_average) < 0.01 # Allow for small floating-point error
print(f"Accuracy check (within 0.01): {accuracy_check}")
ãã®æŠå¿µçãªäŸã¯ãHEã®ãã¯ãŒã瀺ããŠããŸãããµãŒããŒã¯ãçã®åã ã®è²¢ç®å€ããŸã£ããèŠãããšãªããæå³ã®ããèšç®ïŒå¹³åèšç®ïŒãå®è¡ããŸãããç§å¯ããŒãä¿æããŠããã¯ã©ã€ã¢ã³ãã ãããæçµçµæãããã¯è§£é€ã§ããŸãããTenSEALã®ãããªã©ã€ãã©ãªã䜿çšããå®éã®ã³ãŒãã¹ããããã«ã¯ãã³ã³ããã¹ãã®ã·ãªã¢ã«å/ãã·ãªã¢ã«åã®ããã«ããã«æ°è¡ãå¿ èŠã«ãªãå ŽåããããŸãããã³ã¢ããžãã¯ã¯æç€ºããããšããã®ãŸãŸã§ãã
æºååæå·ã®èª²é¡ãšå¶é
ãã®èšãç¥ããªãçŽæã«ãããããããæºååæå·ã¯äžèœè¬ã§ã¯ãªããäžçäžã®ç ç©¶è ããšã³ãžãã¢ã«ãã£ãŠç©æ¥µçã«å¯ŸåŠãããŠããç¬èªã®èª²é¡ã䌎ããŸãã
1. ããã©ãŒãã³ã¹ãªãŒããŒããã
ããã¯ééããªãæãéèŠãªå¶éã§ããæºååæŒç®ã¯ãå¹³æããŒã¿ã«å¯ŸããæŒç®ãããå€§å¹ ã«é ããããå€ãã®èšç®ãªãœãŒã¹ïŒCPUãã¡ã¢ãªïŒãå¿ èŠãšããŸããæå·åãšåŸ©å·åã®ããã»ã¹ããªãŒããŒãããã远å ããŸããããã©ãŒãã³ã¹ã®äœäžã¯ãã¹ããŒã ãèšç®ã®è€éããããã³éžæããããã©ã¡ãŒã¿ãŒã«å¿ããŠãæ°æ¡ïŒ100åãã1000å以äžïŒã«ãªãå¯èœæ§ããããŸããããã«ãããçŸåšã®FHEå®è£ ã§ã¯ããªã¢ã«ã¿ã€ã ã®ãã€ã¹ã«ãŒãããã¢ããªã±ãŒã·ã§ã³ãå°é£ã«ãªããŸãã
2. ããŒã¿ãµã€ãºã®å¢å
HEã¹ããŒã ã«ãã£ãŠçæãããæå·æã¯ãéåžžã察å¿ããå¹³æãããã¯ããã«å€§ãããªããŸãããã®ããŒã¿ãµã€ãºã®å¢å ã«ãããã¹ãã¬ãŒãžèŠä»¶ãå³ãããªãããããã¯ãŒã¯åž¯åå¹ ã®æ¶è²»éãå¢å ããããŒã¿è»¢éãšã¹ãã¬ãŒãžã€ã³ãã©ã¹ãã©ã¯ãã£ã®å¹çã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
3. ããŒç®¡çã®è€éã
ä»ã®æå·åã·ã¹ãã ãšåæ§ã«ãå®å šãªããŒç®¡çã¯éåžžã«éèŠã§ããå ¬éããŒã®é åžãç§å¯ããŒã®å®å šãªä¿åãããã³åæ£HEç°å¢ã§ã®ããŒããŒããŒã·ã§ã³ã®åŠçã¯è€éã«ãªãå¯èœæ§ããããŸããç§å¯ããŒã䟵害ããããšããã®ããŒã§åŠçããããã¹ãŠã®æå·åãããããŒã¿ãå ¬éãããŸãã
4. å路深床ãšããŒãã¹ãã©ããã³ã¹ã
SHEã¹ããŒã ã®å Žåãå¶éããããå路深床ãã¯ããã€ãºã®èç©ãé倧ã«ãªãåã«å®è¡ã§ããæäœã®æ°ãéãããŠããããšãæå³ããŸããFHEã¹ããŒã ã¯ããŒãã¹ãã©ããã§ãããå æããŸãããããŒãã¹ãã©ããæäœèªäœã¯èšç®éãå€ããããã©ãŒãã³ã¹ã®ãªãŒããŒãããã«å€§ããå¯äžããŸããããŒãã¹ãã©ããã®æé©åã¯ãäŸç¶ãšããŠäž»èŠãªç ç©¶åéã§ãã
5. éçºè åãã®è€éã
Pythonã©ã€ãã©ãªã¯ã€ã³ã¿ãŒãã§ã€ã¹ãç°¡çŽ åããŸãããå¹ççã§å®å šãªHEã¢ããªã±ãŒã·ã§ã³ãéçºããã«ã¯ãæå·åãã©ã¡ãŒã¿ãŒïŒå€é åŒã¢ãžã¥ã©ã¹æ¬¡æ°ãä¿æ°ã¢ãžã¥ã©ã¹ãCKKSã®ã¹ã±ãŒã«ãã¡ã¯ã¿ãŒãªã©ïŒãã»ãã¥ãªãã£ã粟床ãããã³ããã©ãŒãã³ã¹ãžã®åœ±é¿ã«ã€ããŠã埮åŠãªçè§£ãå¿ èŠã§ãããã©ã¡ãŒã¿ãŒã誀ã£ãŠéžæãããšãå®å šã§ãªãå®è£ ãŸãã¯æ©èœããªãã·ã¹ãã ã«ã€ãªããå¯èœæ§ããããŸããPythonã«ãã£ãŠå¹³åŠåãããŠããŸãããåŠç¿æ²ç·ã¯äŸç¶ãšããŠå®è³ªçã§ãã
6. ç¹å®ã®æäœã®æ©èœå¶é
FHEã¯ä»»æã®é¢æ°ããµããŒãããŸãããäžéšã®æäœã¯ãæºååã§å®è¡ããã®ãæ¬è³ªçã«ããå°é£ãŸãã¯å¹çãäœããªããŸããããšãã°ãæ¯èŒïŒ`if x > y`ãªã©ïŒãŸãã¯ããŒã¿ã«äŸåããåå²ãå¿ èŠãšããæäœã¯ãHEãã©ãã€ã å ã§å®è£ ããã®ãè€éã§é«äŸ¡ã«ãªãå¯èœæ§ããããå€ãã®å ŽåãOblivious RAMãç¹æ®ãªåè·¯ãªã©ã®æè¡ã䜿çšããã¯ãªãšã€ãã£ããªåé¿çãå¿ èŠã§ãã
7. ãããã°ã®èª²é¡
æå·åãããããŒã¿ã§åäœããã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã¯æ¬è³ªçã«å°é£ã§ãããã¹ãŠã®å€ãæå·åãããŠããããããšã©ãŒãçºçããå Žæãçè§£ããããã«äžéå€ãç°¡åã«èª¿ã¹ãããšãã§ããŸãããããã«ã¯ãæ éãªèšèšãåºç¯ãªãã¹ããããã³ç¹æ®ãªãããã°ããŒã«ãå¿ èŠã§ãã
æºååæå·ã®å°æ¥ïŒã°ããŒãã«ãªå±æ
çŸåšã®èª²é¡ã«ãããããããæºååæå·ã®åéã¯é©ç°çãªããŒã¹ã§é²æ©ããŠããŸããåŠçãæ¥çã®å·šäººãæ°èäŒæ¥ãå«ãã°ããŒãã«ãªç ç©¶ã³ãã¥ããã£ã¯ããããã®å¶éãå æããããã«å€å€§ãªæè³ãè¡ã£ãŠãããããåºç¯ãªæ¡çšãžã®éãéããŠããŸãã
1. ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³
HEæäœãé«éåããããã«èšèšãããç¹æ®ãªããŒããŠã§ã¢ïŒASICãFPGAãGPUïŒã®éçºã«éç¹ã眮ãããŠããŸãããããã®å°çšã¢ã¯ã»ã©ã¬ãŒã¿ã¯ãããã©ãŒãã³ã¹ã®ãªãŒããŒããããå€§å¹ ã«åæžããHEãã¯ããã«åºç¯å²ã®ãªã¢ã«ã¿ã€ã ããã³ãã€ã¹ã«ãŒãããã¢ããªã±ãŒã·ã§ã³ã§å®çŸå¯èœã«ããå¯èœæ§ããããŸããIntelãIBMãªã©ã®äŒæ¥ã¯ããã®åéãç©æ¥µçã«æš¡çŽ¢ããŠããŸãã
2. ã¢ã«ãŽãªãºã ã®é²æ©ãšæ°ããã¹ããŒã
æå·åã¹ããŒã ãšã¢ã«ãŽãªãºã ã®ç¶ç¶çãªæ¹åã«ãããããå¹ççãªæäœãšæå·æãµã€ãºã®çž®å°ã«ã€ãªãã£ãŠããŸããç ç©¶è ã¯ãããŒãã¹ãã©ããã®å¹çãšå šäœçãªããã©ãŒãã³ã¹ãåäžãããããã«ãæ°ããæ°åŠçæ§æãšæé©åãæš¡çŽ¢ããŠããŸãã
3. ã¡ã€ã³ã¹ããªãŒã ãã©ãããã©ãŒã ãšã®çµ±å
HEæ©èœãæ¢åã®ã¯ã©ãŠããã©ãããã©ãŒã ãæ©æ¢°åŠç¿ãã¬ãŒã ã¯ãŒã¯ãããã³ããŒã¿ããŒã¹ã·ã¹ãã ã«ããã«æ·±ãçµ±åããããšãæåŸ ã§ããŸããããã«ãããåºç€ãšãªãè€éããããã«æœè±¡åãããåºç¯ãªæå·åã®ç¥èããªããŠãããããæŽ»çšã§ãããããå€ãã®éçºè ãHEã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
4. æšæºåã®åãçµã¿
HEãæçããã«ã€ããŠãã¹ããŒã ãšAPIã®æšæºåã«åããåãçµã¿ãéèŠã«ãªããŸããããã«ãããããŸããŸãªå®è£ éã®çžäºéçšæ§ã確ä¿ãããHEã¢ããªã±ãŒã·ã§ã³ã®ããå ç¢ã§å®å šãªãšã³ã·ã¹ãã ãã°ããŒãã«ã«è²æãããŸãã
5. ãã€ããªããã¢ãããŒã
å®çšçãªãããã€ã¡ã³ãã§ã¯ããããããã€ããªããã¢ãããŒããæ¡çšãããHEãå®å šãªãã«ãããŒãã£èšç®ïŒSMCïŒãé£ååŠç¿ãããã³å·®åãã©ã€ãã·ãŒãªã©ã®ä»ã®ãã©ã€ãã·ãŒåŒ·åãã¯ãããžãŒãšçµã¿åããããŸããåãã¯ãããžãŒã«ã¯åŒ·ã¿ããããããããçµã¿åãããŠäœ¿çšââãããšãè€éãªã·ããªãªã«å¯ŸããŠå æ¬çãªãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ã®ä¿èšŒãæäŸã§ããŸãã
6. èŠå¶ã®æšé²
ã°ããŒãã«ãªããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒGDPRãCCPAãããŸããŸãªåœå æ³ïŒã®å¢å ã«ããããã©ã€ãã·ãŒãä¿è·ãããã¯ãããžãŒã«å¯Ÿãã匷åãªåžå ŽéèŠãçãŸããŠããŸãããã®èŠå¶å§åã¯ãHEãœãªã¥ãŒã·ã§ã³ãžã®æè³ãšã€ãããŒã·ã§ã³ãä¿é²ãç¶ããŸãã
éçºè ããã³çµç¹åãã®å®è¡å¯èœãªæŽå¯
æºååæå·ã®åãæŽ»çšããããšããŠããå人ããã³çµç¹ã®ããã«ã以äžã«å®è¡å¯èœãªæé ãšèæ ®äºé ã瀺ããŸãã
- æ¢çŽ¢ãšåŠç¿ããå§ããïŒTenSEALãPyfhelãConcrete-MLãªã©ã®Pythonã©ã€ãã©ãªãæãäžããŸããåºæ¬çãªæŠå¿µãšå®éçãªæå³ãçè§£ããããã«ãç°¡åãªäŸã詊ããŠãã ããããªã³ã©ã€ã³ã³ãŒã¹ããã¥ãŒããªã¢ã«ãããã¥ã¡ã³ãã¯åªããåºçºç¹ã§ãã
- ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ãç¹å®ããïŒãã¹ãŠã®åé¡ã«FHEãå¿ èŠãªããã§ã¯ãããŸããããŸããHEãç¬èªã®ãœãªã¥ãŒã·ã§ã³ãæäŸã§ãããçµç¹å ã®ç¹å®ã®äŸ¡å€ã®é«ãããŒã¿ãã©ã€ãã·ãŒã®èª²é¡ãç¹å®ããŸããããŒã¿ãå ¬éããã«ä¿¡é ŒãããŠããªããšã³ãã£ãã£ã«ãã£ãŠåŠçãããå¿ èŠãããåé¡ãæ€èšããŠãã ããã
- ãã¬ãŒããªããçè§£ããïŒããã©ãŒãã³ã¹ã®ãªãŒããŒããããããŒã¿ãµã€ãºã®å¢å ãããã³è€éããèªèããŠãã ããããã©ã€ãã·ãŒã®ã¡ãªãããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®ãããã®ã³ã¹ããäžåããã©ãããè©äŸ¡ããŸãã
- ãã€ããããããžã§ã¯ãïŒå°èŠæš¡ã§å®çµåã®ãã€ããããããžã§ã¯ãããå§ããŸããããã«ãããããŒã ã¯å®éã«äœéšããçŸå®äžçã®ããã©ãŒãã³ã¹ã枬å®ããå€é¡ã®åææè³ãªãã«æœåšçãªçµ±åã®èª²é¡ãç¹å®ã§ããŸãã
- å°éå®¶ãšååããïŒè€éãªãããã€ã¡ã³ãã®å Žåã¯ãæå·åã®å°éå®¶ãšååãããããã©ã€ãã·ãŒãä¿è·ãããã¯ãããžãŒãå°éãšããçµç¹ã«çžè«ããŠãã ããããã®åéã¯æ¥éã«é²åããŠãããå°éå®¶ã®ã¬ã€ãã³ã¹ã¯éåžžã«è²Žéã§ãã
- ææ°æ å ±ãå ¥æããïŒHEã®ç¶æ³ã¯ãã€ãããã¯ã§ããå®è£ ã«åœ±é¿ãäžããå¯èœæ§ã®ãã鲿©ã«ã€ããŠåžžã«ææ°æ å ±ãå ¥æããããã«ãç ç©¶éçºãæ°ããã©ã€ãã©ãªã®ãªãªãŒã¹ãããã³æ¥çã®ãã¬ã³ãã远跡ããŠãã ããã
- ãã€ããªãããœãªã¥ãŒã·ã§ã³ãæ€èšããïŒHEãä»ã®ãã©ã€ãã·ãŒåŒ·åææ³ïŒããªããã»ã¹ã®ããã®å®å šãªãã«ãããŒãã£èšç®ã忣ã¢ãã«ãã¬ãŒãã³ã°ã®ããã®é£ååŠç¿ãªã©ïŒãšçµã¿åãããŠãããå ç¢ã§å¹ççãªãã©ã€ãã·ãŒã¢ãŒããã¯ãã£ãæ§ç¯ããæ¹æ³ãæ€èšããŠãã ããã
- ãã¬ãŒãã³ã°ã«æè³ããïŒçµç¹ã®å Žåã¯ãç€Ÿå æ©èœãæ§ç¯ããããã«ãHEã®åºç€ãšãã®å®éçãªã¢ããªã±ãŒã·ã§ã³ã«é¢ãããšã³ãžãã¢ãªã³ã°ããŒã ãšããŒã¿ãµã€ãšã³ã¹ããŒã ã®ãã¬ãŒãã³ã°ã«æè³ããŸãã
çµè«ïŒPythonãæèŒããå®å šãªæªæ¥
æºååæå·ã¯ãããŒã¿é§ååã®äžçã«ãããå ç¢ãªããŒã¿ãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ãæ±ããäžã§ãèšå¿µç¢çãªé£èºã衚ããŠããŸããæå·åãããããŒã¿ã§ã®èšç®ãå¯èœã«ããããšã§ãåŸæ¥ã®ã·ã¹ãã ãæ©ãŸããéèŠãªè匱æ§ãæé€ãã匷åãªãã©ãã€ã ã·ãããæäŸããŸãã
ããã©ãŒãã³ã¹ãšè€éããäŸç¶ãšããŠæŽ»çºãªç ç©¶åéã§ãããé²å段éã«ããã«ãããããããç¹ã«Pythonã©ã€ãã©ãªã«ãã£ãŠæäŸãããã¢ã¯ã»ã·ããªãã£ã«ããã€ãããŒã·ã§ã³ã®å éããŒã¹ã¯ãHEãå®å šãªããŒã¿åŠçã®äžå¯æ¬ ãªéšåã§ããæªæ¥ã瀺ããŠããŸããã°ããŒãã«ãªå»åŠç ç©¶ã§æ©å¯æ§ã®é«ãæ£è ããŒã¿ãä¿è·ããããšãããã¯ã©ãŠãã§ãã©ã€ããŒãAIãæå¹ã«ããããšãŸã§ãHEã¯æé«æ°Žæºã®æ©å¯æ§ãç¶æããªãããåäŸã®ãªãæ©èœã®ããã¯ãè§£é€ããããšãçŽæããŸãã
ãã®é«åºŠãªæå·åã®æåç·ã芪ãã¿ãããããPythonã®åœ¹å²ã¯äžå¯æ¬ ã§ããçŽæçãªããŒã«ãšãµããŒããšã³ã·ã¹ãã ãæäŸããããšã«ãããPythonã¯äžçäžã®æ°äžä»£ã®éçºè ãšçµç¹ããã©ã€ãã·ãŒãä¿è·ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããå®å šã§ä¿¡é Œã§ãããããŒã¿ã€ã³ããªãžã§ã³ããªã°ããŒãã«ãªæªæ¥ã圢äœãããšãå¯èœã«ããŠããŸãã
ãŠããã¿ã¹ãªæºååæå·ãžã®éã®ãã¯é²è¡äžã§ãããPythonãã¢ã¯ã»ã·ããªãã£ãäž»å°ããŠãããããæå·åãããããŒã¿ã§ã®çã«å®å šãªèšç®ã®ããžã§ã³ã¯ãããŸã§ä»¥äžã«è¿ã¥ããŠããŸãããã®ãã¯ãããžãŒãåãå ¥ãããã®å¯èœæ§ãæ¢æ±ããææ¥ã®å®å šãªããžã¿ã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§ç¯ã«è²¢ç®ããŠãã ããã