èéåæå·ã®å®è£ ã«ãããåå®å šæ§ã®éèŠãªåœ¹å²ãæ¢ããå°æ¥ã®éåè åšã«å¯Ÿããå ç¢ã§ã»ãã¥ã¢ãªã·ã¹ãã ã確ä¿ããŸããåå®è£ ã®æè¡ãå©ç¹ãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããŸãããã
åå®å šãªèéåæå·ïŒéåèæ§ã®ããåå®è£
éåã³ã³ãã¥ãŒãã£ã³ã°ã®ç»å Žã¯ãçŸä»£ã®æå·ã·ã¹ãã ã«é倧ãªè åšããããããŠããŸããRSAãECCãªã©ãåºãå©çšãããŠããå ¬ééµã¢ã«ãŽãªãºã ã®å€ãã¯ãShorã®ã¢ã«ãŽãªãºã ãå®è¡ããéåã³ã³ãã¥ãŒã¿ãŒããã®æ»æã«å¯ŸããŠè匱ã§ãããã®ãããå€å žã³ã³ãã¥ãŒã¿ãŒãšéåã³ã³ãã¥ãŒã¿ãŒã®äž¡æ¹ã«å¯ŸããŠå®å šãªæå·ã·ã¹ãã ãæ§ç¯ããããšãç®æããèéåæå·ïŒPQCïŒãšããŠç¥ãããéåèæ§æå·ã®éçºãé²ããããŠããŸãã
PQCã¢ã«ãŽãªãºã ã®æ°åŠçåºç€ã¯éåžžã«éèŠã§ããããã®å®çšçãªå®è£ ãåæ§ã«éèŠã§ããæå·å®è£ ã«ããããã°ã¯ãåºç€ãšãªãã¢ã«ãŽãªãºã ãçè«çã«å¥å šã§ãã£ãŠãã壿» çãªã»ãã¥ãªãã£äŸµå®³ã«ã€ãªããå¯èœæ§ããããŸããããã§åå®å šæ§ãéèŠã«ãªããŸããåå®å šæ§ãšã¯ãããã°ã©ã å®è¡äžã«ç¹å®ã®çš®é¡ã®ãšã©ãŒãçºçããã®ãé²ãããã°ã©ãã³ã°èšèªã®ç¹æ§ã§ããåå®å šãªèšèªãšæè¡ã䜿çšããããšã§ãPQCå®è£ ã®ä¿¡é Œæ§ãšã»ãã¥ãªãã£ãå€§å¹ ã«åäžãããããšãã§ããŸãã
èéåæå·ã«ãããŠåå®å šæ§ãéèŠã§ããçç±
åå®å šæ§ã¯ãããã€ãã®äž»èŠãªçç±ããPQCå®è£ ã®å ç¢æ§ãšã»ãã¥ãªãã£ã確ä¿ããäžã§æ¥µããŠéèŠãªåœ¹å²ãæãããŸãã
- ãããã¡ãªãŒããŒãããŒã®é²æ¢ïŒãããã¡ãªãŒããŒãããŒã¯ãæå·ãœãããŠã§ã¢ã«ãããäžè¬çãªè匱æ§ã®åå ã§ããããã°ã©ã ããããã¡ã®å²ãåœãŠãããç¯å²ãè¶ ããŠããŒã¿ãæžã蟌ã¿ã飿¥ããã¡ã¢ãªé åãäžæžãããå¯èœæ§ããããŸããèªåå¢çãã§ãã¯æ©èœãåããåå®å šãªèšèªã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ãåžžã«æå¹ãªå¢çå ã«ããããšãä¿èšŒããããšã§ããããã¡ãªãŒããŒãããŒã广çã«é²ãããšãã§ããŸããäŸãã°ãRustãGoã®ãããªåŒ·åãªã¡ã¢ãªå®å šæ§æ©èœãåããèšèªã¯ãã»ãã¥ãªãã£ãéèŠãããã¢ããªã±ãŒã·ã§ã³ã§å¥œãã§äœ¿çšãããŸãã
- ããŒã¿æŽåæ§ã®ç¢ºä¿ïŒåã·ã¹ãã ã¯ã倿°ãä¿æã§ããå€ã«å¶çŽã課ãããšãã§ããŸããããã«ãããããŒã¿ã®ç Žæãé²ããæå·æäœãæå¹ãªå ¥åã«å¯ŸããŠå®è¡ãããããšãä¿èšŒã§ããŸããäŸãã°ãæå·éµãæŽæ°ãšããŠè¡šçŸãããŠããå Žåãåã·ã¹ãã ã¯éµãç¹å®ã®ç¯å²å ã«ããããšãããã³æ£ããããããã£ãæã£ãŠããããšã匷å¶ã§ããŸãã
- åœ¢åŒæ€èšŒã®ä¿é²ïŒåœ¢åŒæ€èšŒã¯ããœãããŠã§ã¢ã®æ£ç¢ºæ§ã蚌æããããã®å³å¯ãªæè¡ã§ããåå®å šãªèšèªã¯ãåœ¢åŒæ€èšŒã«é©ããæ©èœãåããŠããããšããããããŸããäŸãã°ãäŸååã¯è€éãªããã°ã©ã ã®äžå€æ¡ä»¶ã衚çŸããããã«äœ¿çšã§ãããããã¯èªåå®ç蚌æåšã䜿çšããŠæ€èšŒã§ããŸããCoqãIsabelle/HOLã®ãããªã·ã¹ãã ã¯ãæå·å®è£ ã圢åŒçã«æ€èšŒããããã«å©çšãããŠããŸãã
- ã³ãŒãä¿å®æ§ã®åäžïŒåå®å šãªã³ãŒãã¯ãäžè¬çã«åå®å šã§ãªãã³ãŒããããçè§£ãããããä¿å®ããããã§ããåã·ã¹ãã ã¯ã³ãŒãã®æå³ãããåäœã«é¢ãã貎éãªæ å ±ãæäŸããéçºè ããã®æ£ç¢ºæ§ã«ã€ããŠæšè«ãããšã©ãŒãæ€åºããããšã容æã«ããŸãã
- æ»æå¯Ÿè±¡é åã®åæžïŒç¹å®ã®çš®é¡ã®ãšã©ãŒãæé€ããããšã§ãåå®å šæ§ã¯æå·ã·ã¹ãã å šäœã®æ»æå¯Ÿè±¡é åãåæžããŸããããã«ãããæ»æè ãè匱æ§ãèŠã€ããŠæªçšããããšãããå°é£ã«ãªããŸãã
éåèæ§ã®ããã®åå®è£ æè¡
PQCã·ã¹ãã ã§åå®å šæ§ãå®è£ ããããã«ãããã€ãã®æè¡ã䜿çšã§ããŸãã
1. éçåä»ã
éçåä»ãã¯ãã³ã³ãã€ã«æã«å€æ°ãåŒã®åããã§ãã¯ãããã®ã§ããããã«ãããããã°ã©ã ãå®è¡ãããåã«å€ãã®åãšã©ãŒãæ€åºã§ããŸããéçåä»ãã¯ãåçŽãªååçåã·ã¹ãã ããããæŽç·Žãããæ§é çåã·ã¹ãã ãŸã§ãããŸããŸãªåã·ã¹ãã ã䜿çšããŠå®è£ ã§ããŸããC++ãJavaãRustãHaskellã®ãããªèšèªããã®äŸã§ãã
äŸ (C++):
C++ã§ã®è¡åä¹ç®ã®ç°¡åãªäŸãèããŸãã
#include <vector>
std::vector<std::vector<int>> matrixMultiply(
const std::vector<std::vector<int>>& a,
const std::vector<std::vector<int>>& b) {
if (a[0].size() != b.size()) {
throw std::invalid_argument(\"Incompatible matrix dimensions\");
}
std::vector<std::vector<int>> result(a.size(), std::vector<int>(b[0].size(), 0));
for (size_t i = 0; i < a.size(); ++i) {
for (size_t j = 0; j < b[0].size(); ++j) {
for (size_t k = 0; k < b.size(); ++k) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
return result;
}
åã·ã¹ãã ã¯ã颿°ãäºææ§ã®ããæ¬¡å ã®è¡åãåãåããè¿ãããšãä¿èšŒããŸããC++ã¯ããã©ã«ãã§èªåå¢çãã§ãã¯æ©èœãæã¡ãŸããããææ°ã®C++ã³ã³ãã€ã©ãéçè§£æããŒã«ã¯ãæœåšçãªå¢çå€ã¢ã¯ã»ã¹ããã®ä»ã®åé¢é£ã®åé¡ãç¹å®ã§ããŸãã
2. åçåä»ã
åçåä»ãã¯ãå®è¡æã«å€æ°ãåŒã®åããã§ãã¯ãããã®ã§ããããã«ããæè»æ§ãé«ãŸããŸãããåãã¹ããããçºçããå Žåã«ã¯ã©ã³ã¿ã€ã ãšã©ãŒã«ã€ãªããå¯èœæ§ããããŸããåçåä»ãã¯ãPythonãJavaScriptã®ãããªèšèªã§äžè¬çã«äœ¿çšãããŸãã
åçåä»ãã¯ã»ãã¥ãªãã£ãäœãããã«èŠãããããããŸããããã©ã³ã¿ã€ã ãã§ãã¯ãã¢ãµãŒã·ã§ã³ãçµã¿èŸŒãããšã§ãPQCå®è£ ã«ãããŠäŸç¶ãšããŠå¹æçã«äœ¿çšã§ããŸãããã®ã¢ãããŒãã¯ãéçºããã»ã¹ã®æ©ã段éã§åãšã©ãŒãææããã»ãã¥ãªãã£è匱æ§ã®åå ãšãªãã®ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
äŸ (Python):
def matrix_multiply(a, b):
if len(a[0]) != len(b):
raise ValueError(\"Incompatible matrix dimensions\")
result = [[0 for _ in range(len(b[0]))] for _ in range(len(a))] # Correct initialization
for i in range(len(a)):
for j in range(len(b[0])):
for k in range(len(b)):
result[i][j] += a[i][k] * b[k][j]
return result
ããã§ã`matrix_multiply` 颿°ã¯ãä¹ç®ã«é²ãåã«è¡åãäºææ§ã®ããæ¬¡å ãæã£ãŠããããšãä¿èšŒããããã«ãæç€ºçãªã©ã³ã¿ã€ã ãã§ãã¯ãå«ãã§ããŸããPythonã¯åçåä»ãã§ããããã®æç€ºçãªãã§ãã¯ã¯ã次å ã®äºææ§ã«é¢ããŠéçåãã§ãã¯ãšåæ§ã®ã¬ãã«ã®å®å šæ§ãæäŸããŸãã
3. äŸåå
äŸååã¯ãåãå€ã«äŸåããããšãå¯èœã«ãã匷åãªåã·ã¹ãã æ©èœã§ããããã«ãããè€éãªããã°ã©ã ã®äžå€æ¡ä»¶ã衚çŸã§ããããå³å¯ãªåãã§ãã¯ãå¯èœã«ãªããŸããäŸååã¯ãIdrisãAgdaã®ãããªèšèªã§äžè¬çã«äœ¿çšãããŸãã
äŸååã¯ãæå·åŠçäžå€æ¡ä»¶ã匷å¶ããããã«äœ¿çšã§ãããããPQCå®è£ ã«ãšã£ãŠç¹ã«æçšã§ããäŸãã°ãäŸååã䜿çšããŠãéµãåžžã«ç¹å®ã®ç¯å²å ã«ããããšããŸãã¯çœ²åãåžžã«æå¹ã§ããããšãä¿èšŒã§ããŸããããã«ãããæå·ãšã©ãŒã®ãªã¹ã¯ãå€§å¹ ã«åæžã§ããŸãã
4. ãªãã¡ã€ã³ã¡ã³ãå
ãªãã¡ã€ã³ã¡ã³ãåã¯ã倿°ãä¿æã§ããå€ã«ã€ããŠããæ£ç¢ºãªå¶çŽãæå®ã§ããåã®äžçš®ã§ãããããã¯éåžžãæ¢åã®åã·ã¹ãã ã®äžã«æ§ç¯ãããããŒã¿åã«å¯Ÿãããããã现ããå¶åŸ¡ãå¯èœã«ããŸãããªãã¡ã€ã³ã¡ã³ãåã¯ãæ°å€ã®ç¯å²ãæååã®é·ããªã©ãåŠçäžã®ããŒã¿ã«é¢ããäžå€æ¡ä»¶ã衚çŸããããã«äœ¿çšã§ããŸãã
5. èšèªããŒã¹ã®ã»ãã¥ãªãã£
èšèªããŒã¹ã®ã»ãã¥ãªãã£ã¯ãã»ãã¥ãªãã£ã¡ã«ããºã ãããã°ã©ãã³ã°èšèªã«çŽæ¥çµ±åããã»ãã¥ãªãã£ãžã®ã¢ãããŒãã§ããããã«ã¯ãã¢ã¯ã»ã¹å¶åŸ¡ãæ å ±ãããŒå¶åŸ¡ãã¡ã¢ãªå®å šæ§ãªã©ã®æ©èœãå«ãŸããŸããèšèªããŒã¹ã®ã»ãã¥ãªãã£ã¯ããã现ããã¬ãã«ã§ã»ãã¥ãªãã£ããªã·ãŒã匷å¶ããããã«äœ¿çšã§ããåºç¯ãªã»ãã¥ãªãã£è匱æ§ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
RustãGoã®ãããªèšèªã¯ãã¡ã¢ãªå®å šæ§ãšäžŠè¡åŠçã®å®å šæ§ãæ žãšãªãååãšããŠèšèšãããŠããŸãããããã¯ããŒã¿ç«¶åãã¡ã¢ãªãªãŒã¯ã®ãããªäžè¬çãªè匱æ§ãèªåçã«é²ããæå·å®è£ ã®ããã®ããå®å šãªåºç€ãæäŸããŸãã
èéåæå·ã«ãããå®çšäŸ
ããã€ãã®èéåæå·ã¢ã«ãŽãªãºã ã«ã¯ãåå®å šæ§ã掻çšããå®è£ ããããŸãã以äžã«ããã€ãã®äŸãæããŸãã
1. CRYSTALS-KyberãšCRYSTALS-Dilithium
CRYSTALS-KyberïŒéµã«ãã»ã«åã¡ã«ããºã ïŒãšCRYSTALS-DilithiumïŒããžã¿ã«çœ²åã¹ããŒã ïŒã¯ãNISTèéåæå·æšæºåããã»ã¹ã§åå©ã¢ã«ãŽãªãºã ãšããŠéžã°ããæ ŒåããŒã¹ã®ã¢ã«ãŽãªãºã ã§ãããããã®ã¢ã«ãŽãªãºã ã®å®è£ ã¯ãããã©ãŒãã³ã¹äžã®çç±ããCèšèªãã¢ã»ã³ããªèšèªããã°ãã°å©çšããŸããããããçŸä»£ã®Cã³ã³ãã€ã©ãéçè§£æããŒã«ã¯ãããçšåºŠã®åå®å šæ§ã匷å¶ããããã«äœ¿çšã§ããŸããããã«ãRustã®ãããªèšèªã§ããå®å šãªå®è£ ãäœæããããã®ç ç©¶ãé²è¡äžã§ãã
2. Falcon
Falconã¯ãæ¯èŒçå°ããªçœ²åãµã€ãºãæäŸãã眲åã¹ããŒã ã§ããå®è£ ã¯ãã°ãã°ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ã«éç¹ã眮ããŠãããåå®å šãªèšèªã䜿çšããããšã§ã眲åçæããã³æ€èšŒããã»ã¹ã®æŽåæ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
3. SPHINCS+
SPHINCS+ã¯ãã¹ããŒãã¬ã¹ãªããã·ã¥ããŒã¹çœ²åã¹ããŒã ã§ããã·ã³ãã«ã§å®å šã«ãªãããã«èšèšãããŠãããéåæ»æã«å¯Ÿããèæ§ãæéèŠã§ããã¢ããªã±ãŒã·ã§ã³ã®åŒ·åãªåè£ã§ããSPHINCS+ã®å®è£ ã¯ãè€éãªããã·ã¥é¢æ°ã®èšç®ãããŒã¿æäœã«ããããšã©ãŒãé²ãããšã§ãåå®å šæ§ã®æ©æµãåããããšãã§ããŸãã
課é¡ãšèæ ®äºé
åå®å šæ§ã¯å€§ããªå©ç¹ããããããŸãããåå®å šãªPQCã·ã¹ãã ãå®è£ ããéã«ã¯ãçæãã¹ã課é¡ãšèæ ®äºé ããããŸãã
- ããã©ãŒãã³ã¹ãªãŒããŒãããïŒåãã§ãã¯ã¯ãç¹ã«åçåä»ãèšèªã«ãããŠãããçšåºŠã®ããã©ãŒãã³ã¹ãªãŒããŒããããçºçãããå¯èœæ§ããããŸãããã®ãªãŒããŒãããã¯ãæ éãªèšèšãšæé©åã«ãã£ãŠæå°éã«æããããŸãããäŸç¶ãšããŠéèŠãªèæ ®äºé ã§ãããžã£ã¹ãã€ã³ã¿ã€ã ïŒJITïŒã³ã³ãã€ã«ã®ãããªæè¡ã¯ãåçèšèªã«ãããããã©ãŒãã³ã¹ã®åé¡ã軜æžããã®ã«åœ¹ç«ã¡ãŸãã
- è€éãïŒåå®å šæ§ãå®è£ ããããšã¯ãç¹ã«äŸååã®ãããªé«åºŠãªåã·ã¹ãã æ©èœã䜿çšããå Žåãã³ãŒãããŒã¹ã«è€éããå ããå¯èœæ§ããããŸãããã®è€éãã«ãããã³ãŒãã®çè§£ãšä¿å®ãããå°é£ã«ãªãããšããããŸããè€éãã管çããã«ã¯ãé©åãªããã¥ã¡ã³ãäœæãšãã¹ããäžå¯æ¬ ã§ãã
- èšèªã®éžæïŒããã°ã©ãã³ã°èšèªã®éžæã¯ãåå®å šæ§ãå®è£ ããéã®å®¹æããšæå¹æ§ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããäžéšã®èšèªã¯åå®å šæ§ã念é ã«çœ®ããŠèšèšãããŠããŸãããä»ã®èšèªã§ã¯åãã¬ãã«ã®ã»ãã¥ãªãã£ãéæããããã«ããå€ãã®åŽåãå¿ èŠã§ãã
- æ¢åã³ãŒããšã®çµ±åïŒåå®å šãªã³ãŒããæ¢åã®åå®å šã§ãªãã³ãŒããšçµ±åããããšã¯å°é£ãªå ŽåããããŸããåå¢çãé©åã«åŒ·å¶ãããåãšã©ãŒãå¢çãè¶ããŠäŒæããªãããã«æ³šæããå¿ èŠããããŸãã
- ããŒããŠã§ã¢ã®èæ ®äºé ïŒçµã¿èŸŒã¿ã·ã¹ãã ããã®ä»ã®ãªãœãŒã¹å¶çŽã®ããããã€ã¹ã§PQCã¢ã«ãŽãªãºã ãå®è£ ããå Žåãããã©ãŒãã³ã¹ãšã¡ã¢ãªäœ¿çšéãéèŠãªèæ ®äºé ãšãªããŸããåå®å šãªèšèªãšæè¡ã¯ãå®è£ ãå¹ççã§å®å šã§ããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãããããçšåºŠã®ãªãŒããŒããããå°å ¥ããå¯èœæ§ããããŸãã
åå®å šãªPQCå®è£ ã®ããã®ãã¹ããã©ã¯ãã£ã¹
PQCå®è£ ã«ãããåå®å šæ§ã®å©ç¹ãæå€§åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãå¿ èŠããããŸãã
- åå®å šãªèšèªãéžæããïŒRustãGoãHaskellãOCamlãªã©ãåå®å šæ§ã念é ã«çœ®ããŠèšèšãããããã°ã©ãã³ã°èšèªãéžæããŸãã
- éçè§£æããŒã«ã䜿çšããïŒéçè§£æããŒã«ãå©çšããŠãã³ãŒãå ã®åãšã©ãŒããã®ä»ã®æœåšçãªè匱æ§ãæ€åºããŸããClang Static AnalyzerãSonarQubeã®ãããªããŒã«ã¯ãéçºããã»ã¹ã®æ©ã段éã§åé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- 匷åãªåä»ãã匷å¶ããïŒåŒ·åãªåä»ãã䜿çšããŠã倿°ãšåŒãæç¢ºã«å®çŸ©ãããåãæã¡ãå倿ãæç€ºçãã€å¶åŸ¡ãããŠããããšãä¿èšŒããŸãã
- ã³ãŒãã¬ãã¥ãŒã掻çšããïŒçµéšè±å¯ãªéçºè ã«ã³ãŒããã¬ãã¥ãŒããŠããããæœåšçãªåãšã©ãŒããã®ä»ã®è匱æ§ãç¹å®ããŸãã
- 培åºçã«ãã¹ãããïŒã³ãŒãã培åºçã«ãã¹ãããŠãåãšã©ãŒããªãããšãããã³å¿ èŠãªã»ãã¥ãªãã£ä»æ§ãæºãããŠããããšã確èªããŸãããã¡ãºãã¹ããšåœ¢åŒæ€èšŒã®æè¡ãæ¡çšãã¹ãã§ãã
- ã³ãŒããææžåããïŒã³ãŒãã培åºçã«ææžåããçè§£ãšä¿å®ã容æã«ããŸããåã¢ãããŒã·ã§ã³ãã³ã¡ã³ãã¯ãã³ãŒãã®æå³ãããåäœã説æããã®ã«åœ¹ç«ã¡ãŸãã
- ææ°ã®ç¶æ ãä¿ã€ïŒäœ¿çšããŠããããã°ã©ãã³ã°èšèªãšã©ã€ãã©ãªã®ææ°ã®ã»ãã¥ãªãã£å§åãšããããåžžã«ææ¡ããŠãããŸãã
çµè«
åå®å šæ§ã¯ãèéåæå·ã·ã¹ãã ã®å®è£ ã«ãããŠéèŠãªèæ ®äºé ã§ããåå®å šãªèšèªãšæè¡ã䜿çšããããšã§ãPQCå®è£ ã®ä¿¡é Œæ§ãšã»ãã¥ãªãã£ãå€§å¹ ã«åäžãããæå·ãšã©ãŒã®ãªã¹ã¯ãåæžã§ããŸããéåã³ã³ãã¥ãŒã¿ãŒã®éçºãé²ãã«ã€ããŠãããžã¿ã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã®é·æçãªã»ãã¥ãªãã£ã確ä¿ããããã«ãPQCã·ã¹ãã ã®éçºã«ãããŠåå®å šæ§ãåªå ããããšãäžå¯æ¬ ã§ãã
èéåæå·ãžã®ç§»è¡ã¯ãè€éã§ææŠçãªåãçµã¿ã§ããããããåå®å šæ§ããã®ä»ã®ãã¹ããã©ã¯ãã£ã¹ãåãå ¥ããããšã§ã次äžä»£ã®æå·ã·ã¹ãã ãå€å žæ»æãšéåæ»æã®äž¡æ¹ã«å¯ŸããŠå®å šã§ããããšãä¿èšŒã§ããŸãããã®åãçµã¿ã«ã¯ãå ç¢ã§å®å šãªPQCãœãªã¥ãŒã·ã§ã³ãã°ããŒãã«ã«éçºã»å±éããããã«ãç ç©¶è ãéçºè ãæ¿çç«æ¡è ã®éã®ååãå¿ èŠã§ãã