zk-SNARKsãã¯ãããžãŒã«é¢ããäžé£ã®èšäºãç¶ããŠãVitalik Buterinã«ããéåžžã«èå³æ·±ãèšäºã äºæ¬¡ç®è¡ããã°ã©ã ïŒãŒãããããŒããŒãŸã§ ããç 究ããŠããŸãã
åã®èšäºïŒ äŸä»ãzk-SNARKã®æŠèŠïŒç¿»èš³ïŒ
æè¿ãzk-SNARKsæè¡ãžã®é¢å¿ãéåžžã«é«ãŸã£ãŠããã人ã
ã¯ããªãèãããªãè€éãã®ããã«ãå€ãã®äººããæã®æ°åŠããšåŒã¶ããã«ãªã£ããã®ã®è¬ã解ãããšããŠããŸãã zk-SNARKsã¯ãç¹ã«ãããæ©èœãããããã«çµã¿åãããå¿
èŠã®ããå€æ°ã®ã³ã³ããŒãã³ãã®ããã«ãç解ããã®ãéåžžã«é£ããã§ããããã¯ãããžãŒãå解ãããšãç解ãããããªããŸã...
ãã®åºçç©ã®ç®çã¯ãzk-SNARKãã¯ãããžãŒãå®å
šã«çŽ¹ä»ããããšã§ã¯ãããŸããã ãŸããæåã«ãzk-SNARKãäœã§ãããäœãããããç¥ã£ãŠããããšããããŠæ¬¡ã«ãå€é
åŒã®ãããªããšã«ã€ããŠæšè«ã§ããã»ã©ååã«æ°åŠãç¥ã£ãŠãããšä»®å®ãããŸãïŒã¹ããŒãã¡ã³ãP(x) + Q(x) = (P + Q)(x)
ãããã§ã P
ãšQ
ã¯å€é
åŒã§ãããèªç¶ã§æçœãªããã«èŠããŸãããã¬ãã«ã¯ååã§ãïŒã ãããããã®åºçç©ã¯ãã¯ãããžãŒã®èåŸã«ããã¡ã«ããºã ãæããã«ããzrankã®ç 究è
Eran Tromerã瀺ããå€æã®ååãå¯èœãªéã説æããããšããŠããŸãã

ããã§ã®å€æã¯ã2ã€ã®ã³ã³ããŒãã³ãã«åããããšãã§ããŸãã ãŸããzk-SNARKã¯èšç®äžã®åé¡ã«çŽæ¥é©çšã§ããŸããã ãŸããã¿ã¹ã¯ã解決ããåé¡ã®æ£ããããã©ãŒã ãã«å€æããå¿
èŠããããŸãã ãã©ãŒã ã¯ã2次ç®è¡ããã°ã©ã ãïŒQAPïŒãšåŒã°ããé¢æ°ã³ãŒãããã®ãããªãã©ãŒã ã«å€æããããšã¯ããèªäœéåžžã«éèŠãªã¿ã¹ã¯ã§ãã é¢æ°ã³ãŒããQAPã«å€æããããšã«å ããŠãå€æããé¢æ°ã®å
¥ååŒæ°ãããå Žåã«å®è¡ãããå¥ã®ã¢ã¯ã·ã§ã³ããããŸãã é©åãªãœãªã¥ãŒã·ã§ã³ãäœæããå¿
èŠããããŸãïŒQAPã®ã蚌æ ããšåŒã°ããããšããããŸãïŒã ãã®ãšããã³ã¹ã®å®éã®ããŒãé瀺ãšããã³ã¹ããäœæããå¥ã®ããè€éãªã¡ã«ããºã ãšãæž¡ããããšããã³ã¹ãæ€èšŒããå¥ã®ããã»ã¹ããããŸãããããã¯æ¬æžã®ç¯å²å€ã®å¥ã®äŒè©±ã§ãã ïŒããã»ã¹ã®äžè¬çãªã¹ããŒã ãç解ããã«ã¯ã æåã®èšäºãåç
§ããŠãã ãã ã泚ã翻蚳è
ïŒã
ç°¡åãªäŸãåãäžããŸãã3次æ¹çšåŒã®è§£ãç¥ã£ãŠããããšã蚌æããå¿
èŠããããŸãã
ïŒãã³ãïŒåç3ïŒã ãã®ã¿ã¹ã¯ã¯éåžžã«åçŽãªã®ã§ãçµæã®QAPã¯ããªããæããããã»ã©å€§ãããããŸããã ãã ããå®è¡äžã®ãã¹ãŠã®æ°åŠãèŠãããšãã§ããããã«ãã³ãŒãã¯ååã«éèŠã§ãã
次ã®ããã«æ©èœã説æããŸãã
def qeval(x): y = x**3 return x + y + 5
ããã§äœ¿çšãããåçŽãªå°çšããã°ã©ãã³ã°èšèªã¯ãåºæ¬çãªç®è¡æŒç®ïŒ +, -, *, /
ïŒãéå®ææ°ïŒ x**7
ã§ã¯ãªãx**y
ïŒãããã³å€æ°å²ãåœãŠããµããŒãããŸããé¢æ°å
ã§èšç®ãå®è¡ããçè«ïŒèšç®ã¹ãããã®æ°ã¯å¶éãããŠããããµã€ã¯ã«ã®äœ¿çšã¯èš±å¯ãããŠããŸããïŒã ã¢ãžã¥ãé€ç®ïŒ %
ïŒããã³æ¯èŒæŒç®åïŒ <,>, â€, â¥
ïŒã¯ãµããŒããããŠããªãããšã«æ³šæããŠãã ãããã¢ãžã¥ãé€ç®ãŸãã¯æ¯èŒãå®æããå·¡åã°ã«ãŒãæŒç®ã§çŽæ¥å®è¡ããå¹æçãªæ¹æ³ããªãããã§ãïŒããã«ã¯æè¬ããŸããããã®æäœã®ãããããå®è£
ããæ¹æ³ãããã°ãæ¥åæ²ç·ã®æå·åã¯ãããã€ããªæ€çŽ¢ãããäžåœå°äœå®çããšèšããããéããããã³ã°ãããŸãã
ãããå解ã䜿çšããŠãã¢ãžã¥ãé€ç®ãšæ¯èŒã«èšèªãæ¡åŒµã§ããŸãã次ã«äŸã瀺ããŸãã
è£å©ãã©ã¡ãŒã¿ãšããŠããããã®å±éã®æ£ç¢ºæ§ããã§ãã¯ãããã€ããªæŒç®ã§æ°åŠãå®è¡ããŸãã æéäœæŒç®ã§ã¯ãçå€ãã§ãã¯ïŒ==ïŒãå®è¡å¯èœã§ãããããã«ç°¡åã§ãããããããããã®ããšã¯ä»ã¯æ±ããŸããã æ¡ä»¶åŒããµããŒãããããã«èšèªãæ¡åŒµã§ããŸãïŒããšãã°ã
if x < 5: y = 7; else: y = 9
ïŒãããããç®è¡åœ¢åŒ
y = 7 * (x < 5) + 9 * (x >= 5);
å€æããããšã«ããã
y = 7 * (x < 5) + 9 * (x >= 5);
ãã ããæ¡ä»¶åŒã®äž¡æ¹ã®åå²ãæºããå¿
èŠãããããã¹ããããæ¡ä»¶ãå€æ°ããå Žåã¯ããªãŒããŒãããã³ã¹ããå¢å ããããšã«æ³šæããŠãã ããã
ããã§ã¯ãQAPãžã®å€æããã»ã¹ã段éçã«å®äºããŸãããã èªåã§ã³ãŒããäœæãããå Žåã¯
ãããã§ã³ã³ãã€ã©ã
å®è£
ããŸãã ïŒæè²ç®çã®ã¿ã§ãå®éã®zk-SNARKã®QAPãäœæããæºåã¯ãŸã ã§ããŠããŸããïŒïŒã
åçŽå
æåã®ã¹ãããã¯ãåçŽåãæé ã§ãã ãã®äžã§ãä»»æã®æ°ã®è€éãªæŒç®åãšåŒãå«ãããšãã§ãããœãŒã¹ã³ãŒããã2ã€ã®åœ¢åŒãæã€äžé£ã®æŒç®åã«å€æããŸãã
x = y
ïŒ y
ã¯å€æ°ãŸãã¯æ°å€ã®å ŽåããããŸãïŒããã³
x = y (op) z
ïŒ op
ã¯+, -, *, /
ã§ããŸãy
ããã³z
ã¯å€æ°ãæ°å€ããŸãã¯éšååŒã䜿çšã§ããŸãïŒã
ãããã®åæŒç®åã¯ãåè·¯å
ã®è«ççãªé·ç§»ïŒç¶æ
ãå€æŽãããè«çã²ãŒãããæå³ããŸãã翻蚳è
ã®ã¡ã¢ïŒãšããŠæ³åã§ããŸãã äžèšã®ã³ãŒãã®åçŽåããã»ã¹ã®çµæã¯æ¬¡ã®ãšããã§ãã
sym_1 = x * x y = sym_1 * x sym_2 = y + x ~out = sym_2 + 5
ãœãŒã¹ã³ãŒããšäžèšã®ã³ãŒããèŠããšãããããåçã§ããããšãç°¡åã«ããããŸãã
R1CSãžã®ç§»è¡
çŸåšãããããã©ã³ã¯1å¶éã·ã¹ãã ãïŒR1CSïŒãšåŒã°ãããã®ã«å€æããŠããŸãã R1CSã¯3ã€ã®ãã¯ãã«ïŒaãbãcïŒã®ã°ã«ãŒãã®ã·ãŒã±ã³ã¹ã§ããã解R1CSã¯ãã¯ãã«s
ãããã§ã s
ã¯åŒsa * sb - sc = 0
æºãããªããã°ãªããŸãã.
ããã€ã³ããåãã ïŒè¡ãã¯ãã«ãšåãã¯ãã«ã®ä¹ç®ããã©ã³ã¹ã¬ãŒã¿ã«æ³šæïŒãè¡šããŸãã ç°¡åã«èšãã°ã a
ãšs
ããåæãããåãäœçœ®ã§ãã¯ãã«ã®å€ãä¹ç®ãããããã®ç©ã®åèšããšã£ãŠããã b
ãšs
ã«ã€ããŠåãããšãè¡ãã次ã«c
ãšs
ã«ã€ããŠåãããšãè¡ãc
ãæåŸã«3çªç®ã®çµæã¯æåã®2ã€ã®çµæã®ç©ã«çãããªããŸãã R1CSãœãªã¥ãŒã·ã§ã³ã®äŸïŒ

ããããããã°ã©ã ã«1ã€ã ãã®å¶éãèšãã代ããã«ãå€ãã®å¶éãå°å
¥ããŸãïŒåè«çé·ç§»ã«1ã€ã å®è¡ãããæäœïŒ+ã-ã*ããŸãã¯/ïŒãããã³åŒæ°ãå€æ°ãæ°å€ãã«ãã£ãŠãè«çé·ç§»ãïŒaãbãcïŒããªãã«ã«å€æããæšæºçãªæ¹æ³ããããŸãã åãã¯ãã«ã®é·ãã¯ãã·ã¹ãã å
ã®å€æ°ã®ç·æ°ã«çãããããã«ã¯ãå€~one
ãããŒå€æ°~one
ãå
¥åãã©ã¡ãŒã¿ãŒãçµæãè¡šããããŒå€æ°sym1
ãããã³ãã¹ãŠã®äžéå€æ°ïŒ sym1
ããã³sym2
åç
§ïŒãå«ãŸããŸãã ååãšããŠããã¯ãã«ã¯éåžžã«ãæŸé»ããããç¹å®ã®è«çé·ç§»ã®åœ±é¿ãåããå€æ°ã«å¯Ÿå¿ããå€ãå
¥åãããŸãã
䜿çšããå€æ°ã®ãªã¹ãã瀺ããŸãããã
'~one', 'x', '~out', 'sym_1', 'y', 'sym_2'
解ãã¯ãã«ã¯ãããããã¹ãŠã®å€æ°ã«åæ§ã®é åºã§å€ãå²ãåœãŠãããšã§æ§æãããŸãã
ããã§ãæåã®é·ç§»ã®ïŒaãbãcïŒããªãã«ãèŠã€ããŸãã
a = [0, 1, 0, 0, 0, 0] b = [0, 1, 0, 0, 0, 0] c = [0, 0, 0, 1, 0, 0]
2çªç®ã®äœçœ®ã®è§£ãã¯ãã«ã®å€ã3ã§ã4çªç®ã®äœçœ®ã®è§£ãã¯ãã«ã9ã®å Žåã解ãã¯ãã«ã®æ®ãã®å€ã«é¢ä¿ãªãããã¯ãã«ã®æ€èšŒã3*3 = 9
åæžããã解ãæ£ããããšã確èªããã®ã¯ç°¡åã§ãã 解ãã¯ãã«ã®å€ã2çªç®ã®äœçœ®ã§-3ã4çªç®ã®äœçœ®ã§9ã§ããå Žåããã§ãã¯ãæåããŸãã åãããšãã2çªç®ã®äœçœ®ã®å€7ãš4çªç®ã®äœçœ®ã®49ã«ãåœãŠã¯ãŸããŸãã ãã®æåã®ãã¹ãã®ç®çã¯ãæåã®é·ç§»ã®ã¿ã®å
¥åãšåºåã«äžè²«æ§ãããããšã確èªããããšã§ãã
2çªç®ã®ãžã£ã³ãã«ç§»ããŸãããã
a = [0, 0, 0, 1, 0, 0] b = [0, 1, 0, 0, 0, 0] c = [0, 0, 0, 0, 1, 0]
æåã®ãã§ãã¯ãšåæ§ã«ãããã§ã¯sym_1 * x = y
ããã§ãã¯ãsym_1 * x = y
3çªç®ã®ç§»è¡ïŒ
a = [0, 1, 0, 0, 1, 0] b = [1, 0, 0, 0, 0, 0] c = [0, 0, 0, 0, 0, 1]
ããã§ãã¿ãŒã³ã¯ãããã«ç°ãªããŸãã解ãã¯ãã«ã®æåã®èŠçŽ ã«2çªç®ã®èŠçŽ ã次ã«5çªç®ã®èŠçŽ ãä¹ç®ãã2ã€ã®çµæãå ç®ããŠåèšã6çªç®ã®èŠçŽ ãšçãããã©ããã確èªããŸãã 解ãã¯ãã«ã®æåã®èŠçŽ ã¯åžžã«1ã«çãããããããã¯åãªãå ç®ãã¹ãã§ãããåºåã2ã€ã®å
¥åã®åèšã«çããããšã確èªããŸãã
æåŸã«ã4çªç®ã®ç§»è¡ïŒ
a = [5, 0, 0, 0, 0, 1] b = [1, 0, 0, 0, 0, 0] c = [0, 0, 1, 0, 0, 0]
ããã§ã¯ãæåŸã®ãã¹ã~out = sym_2 + 5
ãåçŸããŸãã ãã§ãã¯ã¯ããœãªã¥ãŒã·ã§ã³ãã¯ãã«ã®6çªç®ã®èŠçŽ ãååŸããæåã®èŠçŽ ã«5ãå ç®ãïŒæåã®èŠçŽ ã¯1ãªã®ã§ãå®éã«ã¯5ãè¿œå ããããšãæå³ããŸãïŒãåºåå€æ°ãæ ŒçŽãã3çªç®ã®èŠçŽ ãšçžé¢ãããŸãã
ãããã£ãŠãR1CSã«ã¯4ã€ã®å¶éããããŸãã 蚌æ ã¯ãå
¥åãåºåãå
éšå€æ°ãå«ããã¹ãŠã®å€æ°ã®å€ã§ãã
[1, 3, 35, 9, 27, 30]
å
¥åå€æ°x = 3ã®å²ãåœãŠããå§ããŠãäžèšã®ç°¡ç¥åãããã³ãŒãããå®è¡ãããã ãã§ãèªåã§èšç®ã§ããŸãããã¹ãŠã®äžéå€æ°ã®å€ãå
¥åããèšç®äžã«å€æŽããŸãã
ããã§ãã±ãŒã¹ã®å®å
šãªR1CSãæäŸããŸãã
A [0, 1, 0, 0, 0, 0] [0, 0, 0, 1, 0, 0] [0, 1, 0, 0, 1, 0] [5, 0, 0, 0, 0, 1] B [0, 1, 0, 0, 0, 0] [0, 1, 0, 0, 0, 0] [1, 0, 0, 0, 0, 0] [1, 0, 0, 0, 0, 0] C [0, 0, 0, 1, 0, 0] [0, 0, 0, 0, 1, 0] [0, 0, 0, 0, 0, 1] [0, 0, 1, 0, 0, 0]
R1CS-QAP
次ã®ã¹ãããã¯ããã®R1CSãåãããžãã¯ãå®è£
ããQAP圢åŒã«å€æããŸãããããã€ã³ããåãã代ããã«å€é
åŒã䜿çšãããŸãã ããã次ã®ããã«è¡ããŸããé·ã6ã®3ã€ã®ãã¯ãã«ã®4ã€ã®ã°ã«ãŒããã次æ°3ã®3ã€ã®å€é
åŒã®6ã€ã®ã°ã«ãŒãã«ç§»åããŸããå€é
åŒã®åx
座æšã¯å¶éã®1ã€ã«å¯Ÿå¿ããŸãã ã€ãŸããx = 1ã§å€é
åŒã®å€ãèšç®ãããšãæåã®ãã¯ãã«ã®ã»ãããååŸããx = 2ããå€é
åŒãèšç®ãããšã2çªç®ã®ãã¯ãã«ã®ã»ãããªã©ãååŸããŸãã
ããšãã°ãã©ã°ã©ã³ãžã¥è£éå€é
åŒã䜿çšããŠãã®å€æãè¡ãããšãã§ããŸãã ã©ã°ã©ã³ãžã¥è£éã解決ããåé¡ã¯ããã§ãïŒç¹ã®ã»ããïŒã€ãŸã(x, y)
座æšãã¢ïŒãããå Žåããããã®ç¹ã§ã©ã°ã©ã³ãžã¥è£éãè¡ããšãããããã¹ãŠã®ç¹ãééããå€é
åŒãåŸãããŸãã ãããè¡ãã«ã¯ã次ã®ããã«ã¿ã¹ã¯ãåå²ããŸãx
åå€ã«å¯ŸããŠãæå®ããããã€ã³ã(x, y)
察å¿ããy
å€ãè¿ããä»ã®ãã¹ãŠã®å Žåã«0ãè¿ãå€é
åŒãäœæããŸãã ãããŠãæçµçµæãåŸãããã«ããã¹ãŠã®å€é
åŒãè¿œå ããŸãã
äŸãæããŸãã ïŒ1ã3ïŒãïŒ2ã2ïŒããã³ïŒ3ã4ïŒãééããå€é
åŒãå¿
èŠã ãšããŸãã ïŒ1ã3ïŒãïŒ2ã0ïŒããã³ïŒ3ã0ïŒãééããå€é
åŒãäœæããããšããå§ããŸãã å€æããããã«ãx = 1ã§ã®ã¿å€ãåããä»ã®å Žåã¯ãŒãã«çããå€é
åŒãäœæããããšã¯éåžžã«ç°¡åã§ãã
(x - 2) * (x - 3)
ãã£ãŒãã§ã¯ã次ã®ããã«ãªããŸãã

ããã§ãããºãŒã ãããã ãã§ãx = 1ã®é«ããå¿
èŠã«ãªããŸãã
(x - 2) * (x - 3) * 3 / ((1 - 2) * (1 - 3))
ããã«ãã以äžãåŸãããŸãã

次ã«ãä»ã®2ã€ã®ç¹ã§åãããšãè¡ããä»ã®2ã€ã®é¡äŒŒããå€é
åŒãååŸããŸãããã ããx = 1ã§ã¯ãªãx = 2ããã³x = 3ã§å€ãååŸããŸãã
3ã€ãã¹ãŠã®å€é
åŒããŸãšããŠååŸããŸãã

ããããŸãã«ç§ãã¡ãå¿
èŠãšãããã®ã§ãã äžèšã®ã¢ã«ãŽãªãºã ã®æéã®è€éãã¯O (n^3)
ã§ãããnåã®ç¹ããããåç¹ã¯å€é
åŒãä¹ç®ããããã«O (n^2)
æéãå¿
èŠãšããŸãã ããããæé©åããããšã«ãããè€éããO (n^2)
æžããããšãã§ããŸãã ãŸããé«éããŒãªãšå€æã¢ã«ãŽãªãºã ãªã©ã䜿çšãããšãè€éãã軜æžã§ããŸããããã«ãããzk-SNARKã倧å¹
ã«æé©åãããŸãã å®éã«ã¯ãå®éã®é¢æ°ã«ã¯äœåãã®é·ç§»ãå«ãŸããããšããããŸãã
次ã«ãR1CSãã©ã°ã©ã³ãžã¥è£éå€é
åŒã«å€æããŸãããã åãã¯ãã«a
ããæåã®äœçœ®ã®å€ãååŸããã©ã°ã©ã³ãžã¥è£éãé©çšããŠå€é
åŒãååŸããŸãïŒãã€ã³ãi
å€é
åŒã®å€ãèšç®a
ãšãæåã®äœçœ®ã®içªç®ã®ãã¯ãã«a
å€ãåŸãããŸãïŒã 次ã«ãåãã¯ãã«b
ããã³c
æåã®äœçœ®ã®å€ã«å¯ŸããŠããã»ã¹ãç¹°ãè¿ãããã®åŸãåŸç¶ã®äœçœ®ã«å¯ŸããŠãã®ããã»ã¹ãç¹°ãè¿ããŸãã 䟿å®äžãããã«çµæã衚瀺ããŸãã
A [-5.0, 9.166, -5.0, 0.833] [8.0, -11.333, 5.0, -0.666] [0.0, 0.0, 0.0, 0.0] [-6.0, 9.5, -4.0, 0.5] [4.0, -7.0, 3.5, -0.5] [-1.0, 1.833, -1.0, 0.166] B [3.0, -5.166, 2.5, -0.333] [-2.0, 5.166, -2.5, 0.333] [0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0] C [0.0, 0.0, 0.0, 0.0] [0.0, 0.0, 0.0, 0.0] [-1.0, 1.833, -1.0, 0.166] [4.0, -4.333, 1.5, -0.166] [-6.0, 9.5, -4.0, 0.5] [4.0, -7.0, 3.5, -0.5]
ä¿æ°ã¯æ¬¡æ°ã®æé ã§äžŠã¹æ¿ãããããããæåã®å€é
åŒã¯0.833 x ^ 3-5 x ^ 2 + 9.166 * x-5.ã§ããå¿
èŠããããŸãããã®å€é
åŒã®ã»ããïŒããã³å€é
åŒZãåŸã§èª¬æããæå³ïŒã¯QAPã€ã³ã¹ã¿ã³ã¹ã®ãã©ã¡ãŒã¿ãŒã§ãã ãããŸã§ãzk-SNARKã®ç¢ºèªã«äœ¿çšããã®ãšåãæ©èœã«å¯ŸããŠãå¿
èŠãªã¢ã¯ã·ã§ã³ã¯ãã¹ãŠ1åã ãå®è¡ãããããšã«æ³šæããŠãã ããã QAPãã©ã¡ãŒã¿ãçæããããšãåå©çšã§ããŸãã
x = 1ã®ããããã¹ãŠã®å€é
åŒãèšç®ããŠã¿ãŸããããx= 1ã®å€é
åŒãæšå®ããããšã¯ããã¹ãŠã®ä¿æ°ãå ç®ããããšãæå³ããŸãïŒä»»æã®kã«å¯ŸããŠ1 ^ k = 1ã§ããããïŒãããã¯é£ããäœæ¥ã§ã¯ãããŸããã ååŸããŸãïŒ
A x=1 0 1 0 0 0 0 B x=1 0 1 0 0 0 0 C x=1 0 0 0 1 0 0
ããã§ãäžèšã§äœæããæåã®è«çé·ç§»ã«å¯ŸããŠãåã3ã€ã®ãã¯ãã«ã®ã»ãããååŸããŸããã
QAPæ€èšŒ
ã§ã¯ãããããã¹ãŠã®ã¯ã¬ã€ãžãŒãªå€æã®æå³ãèŠãŠã¿ãŸãããã çãã¯ãR1CSã®å¶çŽãåå¥ã«ãã§ãã¯ãã代ããã«ãå€é
åŒã§ãã€ã³ãååŸãã¹ããå®è¡ããããšã«ããããã¹ãŠã®å¶çŽãåæã«ãã§ãã¯ã§ããããã«ãªã£ãããšã§ãã

ãã®å Žåãããã€ã³ãååŸããã§ãã¯ã¯äžé£ã®å€é
åŒã®å ç®ãšä¹ç®ã§ãããããçµæèªäœã¯å€é
åŒã«ãªããŸãã è«çé·ç§»ãè¡šãããã«äžèšã§äœ¿çšããåx
座æšã§åŸãããå€é
åŒããŒãã«çããå Žåãããã¯ãã¹ãŠã®ãã§ãã¯ã«åæ Œããããšãæå³ããŸãã çµæã®å€é
åŒããè«çé·ç§»ãè¡šãx
座æšã®å°ãªããšã1ã€ã§éãŒãå€ãäžããå Žåãããã¯ããã®è«çé·ç§»ã«å¯ŸããŠå
¥åå€ãšåºåå€ãççŸããŠããããšãæå³ããŸãïŒããšãã°ãé·ç§»y = x*sym_1
ãããã³å€ãæäŸãããŸããããšãã°ã x = 2
ã sym_1 = 2
ããã³y = 5
ïŒã
çµæã®å€é
åŒã¯ãã©ã®å€ã«å¯ŸããŠããŒãã«ãªããªãããšã«æ³šæããŠãã ããã éåžžãã»ãšãã©ã®å Žåãå€ã¯ãŒããšã¯ç°ãªããŸãã ãã®åäœã¯ãè«ççãªé·ç§»ä»¥å€ã®ç¹ã§å¯èœã§ãããè«ççãªé·ç§»ã«å®éã«å¯Ÿå¿ãããã¹ãŠã®ç¹ã§å€ãŒãããšãå¿
èŠããããŸãã 解å
šäœã®æ£ç¢ºæ§ãæ€èšŒããããã«ãé·ç§»ã«å¯Ÿå¿ããåç¹ã§å€é
åŒt = As * Bs - Cs
ãè©äŸ¡ããŸããã 代ããã«ã t
ãå¥ã®å€é
åŒZ
é€ç®ãã Z
ãt
å®å
šã«é€ç®ããããšã確èªããŸããã€ãŸãã t / Z
é€ç®ãå°äœãªãã§çºçããŸãã
Z
(x - 1) * (x - 2) * (x - 3) ...
ãšããŠå®çŸ©ãã(x - 1) * (x - 2) * (x - 3) ...
ã¯ãè«çé·ç§»ã«å¯Ÿå¿ãããã¹ãŠã®ç¹ã§ãŒãã«çããæãåçŽãªå€é
åŒã§ãã æ°åŠããç¥ãããŠããããã«ããããã®ãã¹ãŠã®ç¹ã§ãŒãã«çããå€é
åŒã¯ããããã®ç¹ã®ãæå°ãå€é
åŒã®åæ°ã§ãªããã°ãªããŸããã éã«ãå€é
åŒãZ
åæ°ã§ããå Žåããããã®ãã€ã³ãã®ããããã§ã®å€ã¯ãŒãã«ãªããŸãã ãã®ç䟡æ§ã«ãããèšç®ãç°¡åã«ãªããŸãã
ããã§ã¯ãäžèšã®å€é
åŒã䜿ã£ãŠãã€ã³ãååŸãã¹ããè¡ããŸãããã ãŸããäžéå€é
åŒïŒ
As = [43.0, -73.333, 38.5, -5.166] Bs = [-3.0, 10.333, -5.0, 0.666] Cs = [-41.0, 71.666, -24.5, 2.833]
As * Bs - Cs
èšç®ããŸãã
t = [-88.0, 592.666, -1063.777, 805.833, -294.777, 51.5, -3.444]
ãæå°ãå€é
åŒZ = (x - 1) * (x - 2) * (x - 3) * (x - 4)
ãèšç®ããŸãã
Z = [24, -50, 35, -10, 1]
äžèšã®çµæãZã§å²ããšã次ã®ããã«ãªããŸãã
h = t / Z = [-3.666, 17.055, -3.444]
ã芧ã®ãšããããã¬ãŒã¹ãªãã
ãããã£ãŠãQAPã®ãœãªã¥ãŒã·ã§ã³ããããŸãã ãã®QAPãœãªã¥ãŒã·ã§ã³ã«å¯ŸããŠåãåã£ãR1CSãœãªã¥ãŒã·ã§ã³ã®å€æ°ã®ãããããå€æŽããããšãããšãããšãã°ãæåŸã®å€ã30ã§ã¯ãªã31ã«èšå®ãããšããã§ãã¯ã®1ã€ã«åæ Œããªãå€é
åŒt
ãåŸãããŸãïŒãã®ç¹å®ã®å Žåãx =ã§ã®çµæ3ã¯0ã§ã¯ãªã-1ã«ãªããŸãïŒã ããã«ã t
ã¯Z
åæ°ã«ã¯ãªããŸããã é€ç®t / Z
ã¯ãæ®ã[-5.0ã8.833ã-4.5ã0.666]ãæäŸããŸãã
äžèšã¯ç°¡ç¥åãããŠããããšã«æ³šæããŠãã ããã ãå®äžçãã®å ç®ã§ã¯ãä¹ç®ãæžç®ãé€ç®ã¯éåžžã®æ°ã§ã¯ãªããæéäœã®èŠçŽ ã§çºçããŸã-èªå·±ççŸã®ãªãã²ã©ãçš®é¡ã®ç®è¡ã§ãããããã£ãŠãç§ãã¡ãç¥ã£ãŠããŠæãããã¹ãŠã®ä»£æ°åã¯ãŸã æå¹ã§ãã ãããããã¹ãŠã®çãã«ã¯ãæéãµã€ãºã®ã»ããã®èŠçŽ ããããŸããéåžžã¯ãnã«å¯ŸããŠ0ãn-1ã®ç¯å²ã®æŽæ°ã§ãã ããšãã°ãn = 13ã®å Žåã1/2 = 7ïŒããã³7 2 = 1ïŒã3 5 = 2ãªã©ã§ãã
æéäœæŒç®ã䜿çšãããšãäžžã誀差ãå¿é
ããå¿
èŠããªããªããã·ã¹ãã ãæ¥åæ²ç·ã§ããŸãåäœã§ããããã«ãªããŸããããã¯ãzk-SNARKsãããã³ã«ãäºå®äžå®å
šã«ããæ®ãã®zk-SNARKsã«æçµçã«å¿
èŠã§ãã
zk-SNARKã®å
éšåäœã«é¢ããå€ãã®è©³çŽ°ã説æããŠãããEran Tromerã«ç¹ã«æè¬ããŸãã