{"id":356291,"date":"2024-05-20T23:26:31","date_gmt":"2024-05-20T23:26:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=356291"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-20T23:26:31","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=356291","title":{"rendered":"<span>Anonymous identification for groups<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>The identification protocol based on the pairing function, resistant to impersonation and compatible with the instant digital signature (IDS) mode, was studied in <a href=\"https:\/\/habr.com\/ru\/articles\/754688\/\" rel=\"noopener noreferrer nofollow\"><u>this article<\/u><\/a>. This protocol uses prover&#8217;s and verifier&#8217;s public keys. As a result, there is no anonymity, since certificates including personal data of their owners are issued for the mentioned keys. This article contains a description and analysis of new anonymous identification protocols for groups.<\/p>\n<p>This publication consists of sections where we describe anonymous group identification protocols for two different scenarios, analyze the key security and resistance to impersonation, estimate the amount of information transmitted, and evaluate the optimization of computations and memory resources. At the end of this text, summary and conclusion are specified and formulated.<\/p>\n<p>This publication consists of sections where we describe anonymous group identification protocols for two different scenarios, analyze the key security and resistance to impersonation, estimate the amount of information transmitted, and evaluate the optimization of computations and memory resources. At the end of this text, summary and conclusion are specified and formulated.<\/p>\n<p>The term &#8216;vanishingly small probability&#8217; (abbreviated as v.s.p.) and the boolean variable <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B},\" alt=\"\\mathfrak{B},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba9\/553\/571\/ba95535714075456f83ab60bf21ec1f7.svg\" width=\"22\" height=\"20\"\/>as well as public key certificates functions, were all explained in our <a href=\"https:\/\/habr.com\/ru\/users\/ENCRY\/publications\/articles\/\" rel=\"noopener noreferrer nofollow\"><u>previous article<\/u><\/a>.<\/p>\n<p>The following practical problem is studied in the fundamental work [RST&#8217;01]. Some party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A},\" alt=\"\\texttt{A},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/668\/8da\/6b7\/6688da6b74b1b93fc9bd10029093f7d0.svg\" width=\"15\" height=\"19\"\/> for example, a member of the cabinet of ministers (CM), intends to publish incriminating information about the actions of the prime minister. For this purpose, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d6a\/2fb\/0e8\/d6a2fb0e898acbccdb547734c96f85ac.svg\" width=\"10\" height=\"15\"\/> contacts, for example, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B},\" alt=\"\\texttt{B},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/395\/244\/807\/395244807d4ad7b915aa26d2b836be23.svg\" width=\"15\" height=\"18\"\/> a journalist from an independent media. In this case, on the one hand, it is necessary to guarantee the anonymity of the source. On the other hand, it&#8217;s essential to ensure the reliability of the information provided. From the point of view of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B},\" alt=\"\\texttt{B},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b72\/bca\/d27\/b72bcad2788c05f43ec00daf7fa4a4fc.svg\" width=\"15\" height=\"18\"\/> the information provided by a member of the CM is considered reliable.<\/p>\n<p>Let&#8217;s take a look at possible options.<\/p>\n<ol>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/207\/aa3\/16a\/207aa316ab05c4c4e4e1426e683d11e7.svg\" width=\"10\" height=\"15\"\/> cannot transmit a message signed with through a digital signature (DS) scheme, since the verification will result in de-anonymization, because\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\u2019s\" alt=\"\\texttt{A}\u2019s\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c42\/b94\/217\/c42b94217ea3b4e9cfff65e8f4c3e092.svg\" width=\"25\" height=\"19\"\/> personal data is included in the public key certificate. Although this method will certainly convince <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B}\" alt=\"\\texttt{B}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d75\/1ec\/95d\/d751ec95dc167066128718d168788ab4.svg\" width=\"10\" height=\"14\"\/> that the information comes from a member of the CM.<\/p>\n<\/li>\n<li>\n<p>If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dfa\/b1a\/56c\/dfab1a56cfe6e87b4653ab73fc97ecc6.svg\" width=\"10\" height=\"15\"\/> uses anonymizing services, then all identifiers of the sender will be removed from the transmitted message. Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B}\" alt=\"\\texttt{B}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f5\/691\/979\/0f569197911536c4b4a8de1651baabff.svg\" width=\"10\" height=\"14\"\/> will not be able to verify that the information comes from a member of the CM and won&#8217;t consider it reliable.<\/p>\n<\/li>\n<\/ol>\n<p>In [RST&#8217;01] a solution has been proposed. Each member of the CM generates a DS using his personal private key, but this DS can only be verified using the personal public keys of all members of the CM, including the witness himself. As a result, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B}\" alt=\"\\texttt{B}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24b\/ba3\/b7a\/24bba3b7a11dc4595c665e5bf34234cd.svg\" width=\"10\" height=\"14\"\/> is convinced and can also convince a third party that the information comes from the CM, but at the same time <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aef\/d64\/3e1\/aefd643e17c1e9ca5473018d9d8e33cc.svg\" width=\"10\" height=\"15\"\/> remains unknown.<\/p>\n<p>We propose a solution to the problem formulated above through an anonymous identification protocol for groups. The advantage of our solution is that in addition to anonymous identification, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b55\/25f\/953\/b5525f95333863072d00a30201c01524.svg\" width=\"10\" height=\"15\"\/> can transmit information confidentially using a secure data transfer tunnel. The tunnel (virtual) is accessible by construction, since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{A}\" alt=\"\\texttt{A}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b75\/2ad\/18e\/b752ad18eef17c377372184d118ac6cd.svg\" width=\"10\" height=\"15\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\texttt{B}\" alt=\"\\texttt{B}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/00d\/7ed\/c3d\/00d7edc3d9b21a8edb329aff8858e305.svg\" width=\"10\" height=\"14\"\/> are able to independently generate a shared session secret key upon successful identification. Confidentiality is guaranteed by using a symmetric cryptographic scheme.<\/p>\n<p>The anonymous group identification protocol also makes it possible to convince a third party that the information received comes from a member of the CM. This follows from the fact that all public keys involved in verifying the evidence belong to members of the CM, which is easily verified using personal data from the certificates of these keys. Anonymity is based on a simple principle, which can be formulated as follows: \u201cit is reliably known that one is from the group, but it is not known who exactly.\u201d<\/p>\n<p>The use of an anonymous group identification protocol is logically justified in the context of solving a wide range of practical problems for which compatibility with the IDS mode is essential. Some scenarios are <a href=\"https:\/\/habr.com\/ru\/articles\/705266\/\" rel=\"noopener noreferrer nofollow\"><u>described here<\/u><\/a>.<\/p>\n<h3>Anonymous identification protocols for groups<\/h3>\n<p>The parameters used below, such as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p\" alt=\"p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a6\/c67\/8e9\/5a6c678e9511a7aaa9b3cd1948ea1a45.svg\" width=\"10\" height=\"15\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"m\" alt=\"m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/560\/3ae\/70b\/5603ae70bf206136ea224c386463911f.svg\" width=\"17\" height=\"12\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{G}_1\" alt=\"\\mathbb{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b9\/cd4\/997\/6b9cd49978e36a8fe76ea3b59b24dac5.svg\" width=\"24\" height=\"19\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{G}_3\" alt=\"\\mathbb{G}_3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18d\/0ac\/2ec\/18d0ac2ec6c8d9d710ceb10ed7be6b1e.svg\" width=\"24\" height=\"20\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{F}_m\" alt=\"\\mathbb{F}_m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/133\/77f\/c2f\/13377fc2f32b398cf34b8dedb32a3e31.svg\" width=\"26\" height=\"20\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\cdot, \\cdot)\" alt=\"e_m(\\cdot, \\cdot)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b1\/ea5\/30a\/3b1ea530ae75a4e15ce6e1284d5238b8.svg\" width=\"57\" height=\"22\"\/> are explained in <a href=\"https:\/\/mega.nz\/file\/MCARjYKA#rsylBNfuCUpRQ8ERy-7F6b2aTL3F8vs30IEYKuHy68o\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>.<\/p>\n<p>For the sake of simplicity, we omit details related to the verification of criteria needed for inclusion in the group, as well as the subsequent registration of those participants who meet them. We will proceed from the assumption that such a group has been successfully created.<\/p>\n<p>For <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"2\\leqslant n&lt;m\" alt=\"2\\leqslant n&lt;m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/771\/b08\/965\/771b089651288403833ab3c83ae9200d.svg\" width=\"90\" height=\"18\"\/> participants, represented by a set of numerators\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{I}=\\{1,\\ldots,n,n+1,\\ldots,2n\\},\" alt=\"\\mathcal{I}=\\{1,\\ldots,n,n+1,\\ldots,2n\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a86\/cb4\/442\/a86cb4442d5d8990d78bf40ed5b8f948.svg\" width=\"245\" height=\"22\"\/> the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/edc\/526\/b37\/edc526b37609f44d80766ac9aff311cc.svg\" width=\"14\" height=\"17\"\/> generates a set of long-term public keys <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P},\" alt=\"\\mathcal{P},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c1e\/442\/2e1\/c1e4422e192ac2cc633a6e11b5dfa98e.svg\" width=\"19\" height=\"20\"\/> a set of personal private keys of participants <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{K},\" alt=\"\\mathcal{K},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/840\/309\/17f\/84030917f50c5b767cc0d6a72cd63550.svg\" width=\"20\" height=\"20\"\/> as well as a group public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}.\" alt=\"\\mathsf{Q}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/88e\/989\/dbd\/88e989dbd72bf6eb838100b7bf5735b4.svg\" width=\"20\" height=\"19\"\/><\/p>\n<p><strong>Setup (Input: <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/585\/bc3\/0c8\/585bc30c853308fa6bacd10fc3b0d99f.svg\" width=\"12\" height=\"12\"\/>. Output: <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P}\" alt=\"\\mathcal{P}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c9c\/b03\/3a1\/c9cb033a1575d987a0063e38d61cac91.svg\" width=\"14\" height=\"18\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{K}\" alt=\"\\mathcal{K}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f6\/535\/515\/0f653551579dc33380be3a6a3a23a508.svg\" width=\"15\" height=\"17\"\/>, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}\" alt=\"\\mathsf{Q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/db4\/391\/fff\/db4391fffbc9666238a60e0d54d6a04a.svg\" width=\"14\" height=\"19\"\/>).<\/strong><\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{I}}=\\mathcal{I}\\setminus \\{n+1\\}=\\{1, \\ldots, n, n+2, \\ldots, 2n\\},\" alt=\"\\widetilde{\\mathcal{I}}=\\mathcal{I}\\setminus \\{n+1\\}=\\{1, \\ldots, n, n+2, \\ldots, 2n\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c95\/d06\/476\/c95d0647690bfacbecd60fa5b5838e6f.svg\" width=\"366\" height=\"25\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"|\\widetilde{\\mathcal{I}}|=2n-1.\" alt=\"|\\widetilde{\\mathcal{I}}|=2n-1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d45\/c74\/e8e\/d45c74e8e3a598d92822a652be73a537.svg\" width=\"110\" height=\"25\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\\in_R\\!(0,m-1].\" alt=\"\\alpha\\in_R\\!(0,m-1].\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/170\/6eb\/b2f\/1706ebb2fe119d21ecae69a6e88a7f31.svg\" width=\"132\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega\\in_R\\!(0,m-1],\" alt=\"\\omega\\in_R\\!(0,m-1],\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df9\/0cd\/4e1\/df90cd4e148bd1b848b9c63d0cf3af2b.svg\" width=\"131\" height=\"22\"\/> if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega=\\alpha,\" alt=\"\\omega=\\alpha,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e02\/409\/8d2\/e024098d209e2069fc289195d5ab0a42.svg\" width=\"55\" height=\"15\"\/> then it chooses another <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega.\" alt=\"\\omega.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b11\/328\/de8\/b11328de89effa3be1bd2f4e88d5ea68.svg\" width=\"17\" height=\"12\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_i=[\\alpha^i\\omega\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{P}_i=[\\alpha^i\\omega\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45c\/d18\/a4c\/45cd18a4c9bfd27dddf9f8bb4c3a68ed.svg\" width=\"211\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\forall i\\in\\widetilde{\\mathcal{I}},\" alt=\"\\forall i\\in\\widetilde{\\mathcal{I}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04b\/b83\/a7a\/04bb83a7acb114078cf5d2654aa01fc4.svg\" width=\"60\" height=\"24\"\/> if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\exists!_{i\\in\\widetilde{\\mathcal{I}}}(\\mathsf{P}_i=\\infty),\" alt=\"\\exists!_{i\\in\\widetilde{\\mathcal{I}}}(\\mathsf{P}_i=\\infty),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ebc\/504\/fbc\/ebc504fbc846270ee6da79d57787dd0b.svg\" width=\"126\" height=\"24\"\/> then it goes to 3.<\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\\in_R\\!(0,m-1],\" alt=\"\\gamma\\in_R\\!(0,m-1],\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/56e\/3fd\/fb3\/56e3fdfb39c1ec1e4ded31252e788096.svg\" width=\"130\" height=\"22\"\/> if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\gamma=\\omega)\\lor(\\gamma=\\alpha),\" alt=\"(\\gamma=\\omega)\\lor(\\gamma=\\alpha),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f54\/16a\/24f\/f5416a24f409449424571d64d2c6541a.svg\" width=\"154\" height=\"22\"\/> then it chooses another <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma.\" alt=\"\\gamma.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d63\/873\/569\/d6387356929b5b26212656359868e162.svg\" width=\"16\" height=\"16\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=[\\gamma\\omega\\alpha^{n+1}\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{Q}=[\\gamma\\omega\\alpha^{n+1}\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d1\/bd6\/107\/8d1bd6107ff28b1ae92143da8c2a1016.svg\" width=\"237\" height=\"25\"\/> if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=\\infty,\" alt=\"\\mathsf{Q}=\\infty,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2f\/f66\/1fc\/f2ff661fc533398f141ed490acfe6876.svg\" width=\"65\" height=\"20\"\/> then it goes to 5.<\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_{i}=\\alpha^i\\gamma\\pmod m,\" alt=\"s_{i}=\\alpha^i\\gamma\\pmod m,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a40\/8d8\/5de\/a408d85dedf691cbea8163ac6da08b1f.svg\" width=\"173\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"i=\\overline{1,n},\" alt=\"i=\\overline{1,n},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/762\/d07\/cfe\/762d07cfe7e97c78db0f8112c0b8efe3.svg\" width=\"68\" height=\"26\"\/> if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\exists!_{i\\in[1,n]}(s_{i}=0),\" alt=\"\\exists!_{i\\in[1,n]}(s_{i}=0),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/494\/e6a\/e49\/494e6ae497171b8eab71195c779b95d3.svg\" width=\"130\" height=\"25\"\/> then it goes to 5.<\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P}=\\{\\mathsf{P}_1,\\ldots,\\mathsf{P}_n,\\mathsf{P}_{n+2},\\ldots,\\mathsf{P}_{2n}\\},\" alt=\"\\mathcal{P}=\\{\\mathsf{P}_1,\\ldots,\\mathsf{P}_n,\\mathsf{P}_{n+2},\\ldots,\\mathsf{P}_{2n}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e2\/42a\/a2c\/5e242aa2c6862de97e484f1a91da8c08.svg\" width=\"272\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"|\\mathcal{P}|=2n-1,\" alt=\"|\\mathcal{P}|=2n-1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/690\/0b2\/c7f\/6900b2c7ff20f43d5c6d1425e50072e8.svg\" width=\"110\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{K}=\\{s_1,\\ldots, s_n\\},\" alt=\"\\mathcal{K}=\\{s_1,\\ldots, s_n\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b0\/d09\/515\/3b0d095158fc4a8ed2718d246e664afc.svg\" width=\"145\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"|\\mathcal{K}|=n.\" alt=\"|\\mathcal{K}|=n.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/468\/10d\/90a\/46810d90ab1d6eb857f8e35a6df287e6.svg\" width=\"68\" height=\"22\"\/><\/p>\n<\/li>\n<\/ol>\n<p>The private key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i\\in\\mathcal{K}\" alt=\"s_i\\in\\mathcal{K}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b10\/3c6\/2b7\/b103c62b735adb7d29d37a08f46b6115.svg\" width=\"54\" height=\"20\"\/> is delivered to the <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"i\" alt=\"i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4ea\/47c\/b43\/4ea47cb43c881c5b39a958a74adbc8dc.svg\" width=\"7\" height=\"16\"\/>-th participant in a private way, for example, using <strong><em>Protocol 3<\/em><\/strong> from <a href=\"https:\/\/habr.com\/ru\/articles\/748354\/\" rel=\"noopener noreferrer nofollow\"><u>this article<\/u><\/a>. A separate certificate is issued indicating the owner\u2019s personal data for each public key from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathsf{P}_1, \\ldots, \\mathsf{P}_n\\}.\" alt=\"\\{\\mathsf{P}_1, \\ldots, \\mathsf{P}_n\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/25b\/371\/e72\/25b371e7200f16e5b6a5696bc3e05382.svg\" width=\"111\" height=\"22\"\/> In addition, a single certificate is issued for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathsf{P}_{n+2}, \\ldots, \\mathsf{P}_{2n}, \\mathsf{Q}, n\\},\" alt=\"\\{\\mathsf{P}_{n+2}, \\ldots, \\mathsf{P}_{2n}, \\mathsf{Q}, n\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/548\/b33\/e8e\/548b33e8ecfa30b36dceed76826bf736.svg\" width=\"180\" height=\"22\"\/> which establishes the connection between the components of this set with keys from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathsf{P}_1, \\ldots, \\mathsf{P}_n\\}.\" alt=\"\\{\\mathsf{P}_1, \\ldots, \\mathsf{P}_n\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f5\/518\/990\/5f5518990ec9de043cbd04a19d804691.svg\" width=\"111\" height=\"22\"\/><\/p>\n<p>The setup <u>is performed once<\/u> and ends with the removal of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha,\" alt=\"\\alpha,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/440\/bb8\/971\/440bb8971d40dbc0ff3b28b4a7f3daf3.svg\" width=\"18\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma,\" alt=\"\\gamma,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97a\/2b9\/e42\/97a2b9e42eda92bbae52f236bcede08e.svg\" width=\"16\" height=\"16\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6cf\/a4b\/182\/6cfa4b1821d8064e072008a31015eba0.svg\" width=\"17\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i\" alt=\"s_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ba\/f6b\/64c\/2baf6b64cb2783501e096340df43e4e2.svg\" width=\"16\" height=\"15\"\/> from the local long-term secret memory of party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T.\" alt=\"T.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/248\/173\/ac7\/248173ac7d048b44c72af9d9a23ed9ee.svg\" width=\"19\" height=\"17\"\/> In total, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n+1\" alt=\"n+1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/67a\/520\/7d8\/67a5207d8613bcf18c8ac5cd8bed9868.svg\" width=\"45\" height=\"17\"\/> certificates are issued and maintained.<\/p>\n<h3>Protocol 1<\/h3>\n<p>Let&#8217;s consider the anonymous identification protocol for the case where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ef9\/582\/409\/ef95824097a3a46a61ed508ac2666842.svg\" width=\"15\" height=\"17\"\/> does not belong to the group of registered participants and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_V\" alt=\"\\mathsf{P}_V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e69\/762\/f52\/e69762f527fe7f719ff905f6675608cc.svg\" width=\"25\" height=\"20\"\/> differs from the public keys from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P}.\" alt=\"\\mathcal{P}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/de2\/d5d\/3c4\/de2d5d3c48a2a0b49a532092dd11d864.svg\" width=\"19\" height=\"18\"\/> Let&#8217;s suppose that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/60b\/93a\/be2\/60b93abe27b1bb9fd3003e08503b28c0.svg\" width=\"15\" height=\"17\"\/> owns a key pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathbf{y},\\mathsf{P}_V=[\\mathbf{y}]\\mathsf{G}_1\\},\" alt=\"\\{\\mathbf{y},\\mathsf{P}_V=[\\mathbf{y}]\\mathsf{G}_1\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc8\/7c3\/784\/fc87c3784f2ac4adfbf5f483bfddc46d.svg\" width=\"139\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\mathbf{y} \\in_R\\!(0,m-1]}.\" alt=\"{\\mathbf{y} \\in_R\\!(0,m-1]}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/101\/336\/401\/1013364012b6edd7c304abc9532dca78.svg\" width=\"131\" height=\"22\"\/> The certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ce\/fdf\/19e\/1cefdf19e7d85a481af480ae6261cc4f.svg\" width=\"112\" height=\"22\"\/> is issued for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_V.\" alt=\"\\mathsf{P}_V.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26d\/dee\/806\/26ddee806fbfeab15af3ddcd4b8b7ab1.svg\" width=\"30\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/037\/cab\/14d\/037cab14d1ea09b669404b5c13445018.svg\" width=\"15\" height=\"17\"\/> has access to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}\" alt=\"\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/909\/f83\/5a0\/909f835a0e9ae9cfab195e3cd88f38f6.svg\" width=\"12\" height=\"17\"\/> and knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n.\" alt=\"n.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97f\/11f\/3df\/97f11f3df4e352cb065263e93d404214.svg\" width=\"17\" height=\"12\"\/><\/p>\n<p>Let an <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\" alt=\"\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5bf\/199\/665\/5bf199665331acb39ed763bf12dc2e7e.svg\" width=\"8\" height=\"17\"\/>th participant act as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P,\" alt=\"P,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/835\/959\/57f\/83595957fcf527906c8432b5e5cc76d1.svg\" width=\"20\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\\in\\mathcal{S},\" alt=\"\\ell\\in\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e3\/3e3\/851\/2e33e3851131be13713f900916b79c35.svg\" width=\"49\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}\\subseteq\\{1,\\ldots,n\\}.\" alt=\"\\mathcal{S}\\subseteq\\{1,\\ldots,n\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33b\/271\/9f4\/33b2719f4da4164182598a02ad49bda2.svg\" width=\"127\" height=\"22\"\/><\/p>\n<p><strong>Protocol messages.  <\/strong><\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow V : \\mathsf{S}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_V= [\\upsilon s_\\ell \\mathbf{y} \\pmod m]\\mathsf{G}_1\" alt=\"P \\longrightarrow V : \\mathsf{S}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_V= [\\upsilon s_\\ell \\mathbf{y} \\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68e\/5c2\/a1e\/68e5c2a1ef548351e2a16f7f9e42a102.svg\" width=\"478\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longleftarrow V :\u00a0 \\mathsf{T}=[\\mathbf{y}^\\phi\\pmod m]\\mathsf{P}_V=[\\mathbf{y}^{\\phi+1}\\pmod m]\\mathsf{G}_1\" alt=\"P \\longleftarrow V :\u00a0 \\mathsf{T}=[\\mathbf{y}^\\phi\\pmod m]\\mathsf{P}_V=[\\mathbf{y}^{\\phi+1}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5fb\/159\/336\/5fb1593360f79c52101fddc733a58153.svg\" width=\"475\" height=\"25\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow\u00a0 V\u00a0 : g_a, \\mathsf{R}=[s_\\ell^{-1}]\\mathsf{Q}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" alt=\"P \\longrightarrow\u00a0 V\u00a0 : g_a, \\mathsf{R}=[s_\\ell^{-1}]\\mathsf{Q}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/85c\/53a\/10a\/85c53a10a6cc5e304c6b6b96eeddd030.svg\" width=\"430\" height=\"27\"\/><\/p>\n<\/li>\n<\/ol>\n<p><strong>Actions of the parties.<\/strong>  <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd4\/36b\/230\/cd436b230c6cea0246a8772956f55c52.svg\" width=\"14\" height=\"17\"\/> proves to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/896\/951\/5a9\/8969515a998ae8285eac352b2fc386be.svg\" width=\"15\" height=\"17\"\/> that it knows the private key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_\\ell\" alt=\"s_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9af\/eeb\/477\/9afeeb477cd4092f54b8cdb540f79dff.svg\" width=\"17\" height=\"15\"\/> such that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\\in\\mathcal{S}\" alt=\"\\ell\\in\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bdd\/505\/ee8\/bdd505ee83b3f3dccae060950ef5de17.svg\" width=\"44\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_\\ell\\in\\{\\mathsf {P}_1,\\ldots,\\mathsf{P}_n\\}.\" alt=\"\\mathsf{P}_\\ell\\in\\{\\mathsf {P}_1,\\ldots,\\mathsf{P}_n\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f1f\/a7d\/37b\/f1fa7d37b8c1225046d9973c8ca696f7.svg\" width=\"155\" height=\"22\"\/> During the proof, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell,\" alt=\"\\ell,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/403\/ece\/01f\/403ece01fb5b4151e6809ff424b09666.svg\" width=\"13\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_\\ell\" alt=\"s_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d0d\/4de\/904\/d0d4de9047f6fb82ad8d6f2e8bb97910.svg\" width=\"17\" height=\"15\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_\\ell\" alt=\"\\mathsf{P}_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce1\/0fa\/e17\/ce10fae178323dd39fdfe41f9677f822.svg\" width=\"20\" height=\"20\"\/> are not revealed. The following steps are performed:<\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df5\/7e5\/425\/df57e5425d4cc9c1c1c91489f27c28bf.svg\" width=\"14\" height=\"17\"\/> reads the current certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/939\/704\/839\/939704839178d653454767243ce70e66.svg\" width=\"112\" height=\"22\"\/> and checks the DS of the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{T}.\" alt=\"\\rm{T}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c1\/ab2\/e5e\/0c1ab2e5e930bfe3e28c9701759bc2ab.svg\" width=\"19\" height=\"17\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False\" alt=\"\\mathfrak{B}=False\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a14\/2ee\/4b8\/a142ee4b883206a556bc2ef8db297b0b.svg\" width=\"91\" height=\"17\"\/> then the session ends. If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=True,\" alt=\"\\mathfrak{B}=True,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/047\/c4b\/ad2\/047c4bad27dd436008f69574d46bda69.svg\" width=\"90\" height=\"20\"\/> then it chooses <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\upsilon\\in_R\\!(0,m-1]}\" alt=\"{\\upsilon\\in_R\\!(0,m-1]}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/886\/8df\/dbc\/8868dfdbcff234ae4a5568ad3281d9c3.svg\" width=\"124\" height=\"22\"\/> (<em>commitment<\/em>), computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}\" alt=\"\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d5\/584\/cce\/5d5584cce52d36daf4eb63c85edc5304.svg\" width=\"11\" height=\"17\"\/> (<em>witness<\/em>), checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\mathsf{S}\\stackrel{?}\\neq\\infty}.\" alt=\"{\\mathsf{S}\\stackrel{?}\\neq\\infty}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/17e\/6c1\/8fa\/17e6c18fa7d258d5a6b7ab9718bfa5a8.svg\" width=\"61\" height=\"37\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}=\\infty,\" alt=\"\\mathsf{S}=\\infty,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f8\/d37\/320\/8f8d37320979a27aedb410649adcd204.svg\" width=\"61\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/70d\/802\/e6d\/70d802e6d8bbaed3be8c77734e7dd6dd.svg\" width=\"14\" height=\"17\"\/> selects a new <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec5\/452\/137\/ec5452137fc3553471aa485c0508f1db.svg\" width=\"10\" height=\"12\"\/> and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e14\/7ac\/f57\/e147acf5763a60bd7cf2e7e72928aefa.svg\" width=\"15\" height=\"17\"\/> reads the current certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_V,\\mathsf{P}_V, {\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c0\/e6a\/98c\/1c0e6a98c76195e1049b56ed14417dbe.svg\" width=\"112\" height=\"22\"\/> and checks the DS of the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{T}.\" alt=\"\\rm{T}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c09\/d03\/437\/c09d0343784c0399c3af58ef4036ffa5.svg\" width=\"19\" height=\"17\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False\" alt=\"\\mathfrak{B}=False\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/68d\/cd5\/35c\/68dcd535c1688282ba9506580d27da91.svg\" width=\"91\" height=\"17\"\/> then the session ends. If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=True,\" alt=\"\\mathfrak{B}=True,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/173\/2a0\/f11\/1732a0f1162845d01b9f8705e1ab03f8.svg\" width=\"90\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c24\/996\/a29\/c24996a2979c6eff0c627e600acce4f5.svg\" width=\"15\" height=\"17\"\/> selects <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\phi\\in_R\\!(0, m-1]}\" alt=\"{\\phi\\in_R\\!(0, m-1]}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d75\/33e\/b0a\/d7533eb0a349e90d85e6ecc7fa17ef43.svg\" width=\"125\" height=\"22\"\/> and computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}\" alt=\"\\mathsf{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/149\/f43\/93a\/149f4393af76efd1a1b6327f909437f5.svg\" width=\"13\" height=\"17\"\/> (<em>challenge<\/em>). If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}=\\infty,\" alt=\"\\mathsf{T}=\\infty,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f78\/b10\/44e\/f78b1044e1c702ed05300380753fc2ec.svg\" width=\"63\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/792\/8c3\/2a3\/7928c32a3832c457869bf7e1acc5cf9b.svg\" width=\"15\" height=\"17\"\/> selects a new <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d02\/92a\/064\/d0292a064211ec138b1432785fe5eb3d.svg\" width=\"11\" height=\"20\"\/> and re-performs the necessary computations and checks.  <\/p>\n<\/li>\n<li>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72c\/11d\/01e\/72c11d01ef75a00aa1070e371aeca21e.svg\" width=\"14\" height=\"17\"\/> checks the integrity, authenticity and relevance of public keys <img class=\"formula inline\" width=\"0\" height=\"0\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j\\in\\widetilde{\\mathcal{S}},\" alt=\"j\\in\\widetilde{\\mathcal{S}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fee\/6d0\/a92\/fee6d0a927d43d26ca7b9ff2ef6b9295.svg\" width=\"52\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}=\\{\\mathcal{S}\\}\\setminus\\{\\ell\\},\" alt=\"\\widetilde{\\mathcal{S}}=\\{\\mathcal{S}\\}\\setminus\\{\\ell\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/009\/aea\/c95\/009aeac95f32f730cac7014c8ca526fe.svg\" width=\"123\" height=\"25\"\/> using the appropriate certificates. If relevance is not confirmed or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e1f\/6f5\/544\/e1f6f554480d6f8446489766bf2be90a.svg\" width=\"97\" height=\"20\"\/> then the current session ends. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/608\/62b\/26d\/60862b26d734ef04780218a64cf85bbc.svg\" width=\"14\" height=\"17\"\/> checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}\\stackrel{?}\\neq\\infty.\" alt=\"\\mathsf{T}\\stackrel{?}\\neq\\infty.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/963\/001\/8ef\/9630018ef5b7a990af2b6e286c545778.svg\" width=\"63\" height=\"37\"\/> If it&#8217;s true, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/89b\/ab2\/a55\/89bab2a55384c95b6affe9df95112309.svg\" width=\"14\" height=\"17\"\/> computes <em>response<\/em> for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}\" alt=\"\\widetilde{\\mathcal{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1f\/879\/87a\/b1f87987a41bbf2b824c494448397f10.svg\" width=\"15\" height=\"21\"\/> as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{g_a=g_\\ell^{-1}, \\mathsf{R}\\},\" alt=\"\\{g_a=g_\\ell^{-1}, \\mathsf{R}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d5b\/a68\/189\/d5ba68189032a37f78ecce54743611d5.svg\" width=\"118\" height=\"26\"\/> where <\/p>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_\\ell=e_m([\\upsilon s_\\ell\\pmod m]\\mathsf{T}, \\mathsf{G}_1+\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\mathsf{P}_{n+1-j})= g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\" alt=\"g_\\ell=e_m([\\upsilon s_\\ell\\pmod m]\\mathsf{T}, \\mathsf{G}_1+\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\mathsf{P}_{n+1-j})= g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/593\/12f\/337\/59312f3376952743ae5f1c4a0b472bfd.svg\" width=\"655\" height=\"53\"\/> <\/p>\n<p>otherwise the session ends.<\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a02\/cba\/b3d\/a02cbab3de1ae31ac76255be327329f4.svg\" width=\"15\" height=\"17\"\/> verifies the integrity, authenticity and relevance of public keys <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_{n+1-j},\" alt=\"\\mathsf{P}_{n+1-j},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cfc\/808\/6fe\/cfc8086fe6278f449a498730cecc7c70.svg\" width=\"61\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j\\in\\mathcal{S},\" alt=\"j\\in\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3cc\/d95\/dfa\/3ccd95dfad8fb9c894555b49eae169a7.svg\" width=\"49\" height=\"20\"\/> using the appropriate certificates. If the relevance is not confirmed or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa5\/55c\/69d\/fa555c69d0d8dd4273745cb540cfa91b.svg\" width=\"97\" height=\"20\"\/> then the current session ends. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/740\/ace\/657\/740ace65769fee7afd50ae552b6af6a5.svg\" width=\"15\" height=\"17\"\/> checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathsf{S}\\neq\\infty)\\land((g_a\\neq 1)\\lor(g_a\\neq g)).\" alt=\"(\\mathsf{S}\\neq\\infty)\\land((g_a\\neq 1)\\lor(g_a\\neq g)).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/961\/2e5\/886\/9612e588636af2fc11414e58a68ec2a3.svg\" width=\"271\" height=\"22\"\/> If the condition is not met, the session ends. If it&#8217;s met, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e9a\/6af\/537\/e9a6af537ed639d04ce2074b7950a99f.svg\" width=\"15\" height=\"17\"\/> computes:<\/p>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_b=e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}}\\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma(\\alpha^\\ell+\\omega\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" alt=\"g_b=e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}}\\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma(\\alpha^\\ell+\\omega\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8bd\/72e\/e48\/8bd72ee482e09ccec205982d9b10f0a8.svg\" width=\"654\" height=\"57\"\/> <\/p>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_c=g_bg_a=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma\\omega(\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma\\omega\\alpha^{n+1}\\pmod m}\\text{.}\" alt=\"g_c=g_bg_a=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma\\omega(\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\gamma\\omega\\alpha^{n+1}\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d78\/979\/74e\/d7897974e0ca6db9f9de2b666688ee98.svg\" width=\"613\" height=\"27\"\/> <\/p>\n<\/li>\n<\/ol>\n<p>Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fd0\/e7c\/95b\/fd0e7c95b3852272b629b95882335f00.svg\" width=\"15\" height=\"17\"\/> checks <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_c\\stackrel{?}{=}e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{R}).\" alt=\"g_c\\stackrel{?}{=}e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{R}).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1b4\/418\/ed2\/1b4418ed2cb354cc35b3d328805806a2.svg\" width=\"248\" height=\"30\"\/> If equal, then the proof is accepted, and rejected otherwise.<\/p>\n<p>If the identification stage is successfully completed, the parties independently generate a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c1\/4ea\/edc\/8c14eaedc743262ac9dfed2f60d2eb13.svg\" width=\"14\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}=[\\upsilon s_\\ell\\pmod m]\\mathsf{T}=[\\upsilon s_\\ell\\mathbf{y}^{\\phi+1}\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{A}=[\\upsilon s_\\ell\\pmod m]\\mathsf{T}=[\\upsilon s_\\ell\\mathbf{y}^{\\phi+1}\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c28\/ca8\/981\/c28ca89815b134277f1c48b01c483749.svg\" width=\"414\" height=\"25\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/314\/cf4\/58a\/314cf458ab3fa4eff0b15b13ddcf02b0.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}=[\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}=[\\mathbf{y}^{\\phi+1}\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{B}=[\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}=[\\mathbf{y}^{\\phi+1}\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/113\/191\/cef\/113191cef8945fb67f2eceab9dde70be.svg\" width=\"406\" height=\"25\"\/><\/p>\n<\/li>\n<\/ol>\n<h2>Protocol 2<\/h2>\n<p>Let&#8217;s now consider a protocol where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dd3\/843\/99c\/dd384399c2ccade05aae8d21f790a5f0.svg\" width=\"15\" height=\"17\"\/> belongs to a group of registered participants. Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e30\/d69\/f69\/e30d69f69e8afc23b193b7cfe3963e19.svg\" width=\"15\" height=\"17\"\/> owns a key pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{s_c,\\mathsf{P}_c\\},\" alt=\"\\{s_c,\\mathsf{P}_c\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/66c\/778\/78c\/66c77878c35fb0fd92a3834ff18493e6.svg\" width=\"70\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"c\\in \\widetilde{\\mathcal{S}}\" alt=\"c\\in \\widetilde{\\mathcal{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bf\/6c1\/103\/2bf6c1103bad5e7f4363b48bdc86becd.svg\" width=\"47\" height=\"21\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{s_c=\\gamma\\alpha^c\\pmod m},\" alt=\"{s_c=\\gamma\\alpha^c\\pmod m},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed1\/b5b\/87c\/ed1b5b87c12ecd652982dff72c69a88a.svg\" width=\"176\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_c=[\\omega\\alpha^c\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{P}_c=[\\omega\\alpha^c\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5bb\/f3b\/af2\/5bbf3baf2dfdd488400d05f96d56963a.svg\" width=\"213\" height=\"22\"\/> The certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d82\/f25\/0b5\/d82f250b53e7a7b314271a3783b9035b.svg\" width=\"103\" height=\"26\"\/> is issued for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_c.\" alt=\"\\mathsf{P}_c.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/667\/c56\/f24\/667c56f24b7cf118c437d026a982501e.svg\" width=\"26\" height=\"20\"\/><\/p>\n<p><strong><em>Protocol messages.<\/em><\/strong><\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow V : \\widehat{\\mathsf{S}}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_c= [\\upsilon \\gamma\\omega\\alpha^{c+\\ell}\\pmod m]\\mathsf{G}_1\" alt=\"P \\longrightarrow V : \\widehat{\\mathsf{S}}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_c= [\\upsilon \\gamma\\omega\\alpha^{c+\\ell}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/223\/527\/20c\/22352720cf840a3ea77d9802b892ab7b.svg\" width=\"504\" height=\"27\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longleftarrow V :\u00a0 \\widehat{\\mathsf{T}}=[\\phi]\\widehat{\\mathsf{P}}_c=[\\phi\\gamma^{-1}\\omega\\pmod m]\\mathsf{G}_1\" alt=\"P \\longleftarrow V :\u00a0 \\widehat{\\mathsf{T}}=[\\phi]\\widehat{\\mathsf{P}}_c=[\\phi\\gamma^{-1}\\omega\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a15\/8a1\/03f\/a158a103fb3c9df6d25e019498f13fec.svg\" width=\"377\" height=\"26\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow\u00a0 V : \\hat{g}_a, \\mathsf{R}=[s_\\ell^{-1}]\\mathsf{Q}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" alt=\"P \\longrightarrow\u00a0 V : \\hat{g}_a, \\mathsf{R}=[s_\\ell^{-1}]\\mathsf{Q}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b2e\/254\/5c6\/b2e2545c6c82d1d6519f954ce9039dfe.svg\" width=\"431\" height=\"27\"\/><\/p>\n<\/li>\n<\/ol>\n<p><strong><em>Actions of the parties.<\/em><\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b0e\/068\/751\/b0e06875153f05c1bfc8fe6c82769b3b.svg\" width=\"14\" height=\"17\"\/> proves to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/171\/562\/3ab\/1715623ab2067db2bf0ec602851d654b.svg\" width=\"15\" height=\"17\"\/> that it knows the private key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_\\ell\" alt=\"s_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c1f\/3bd\/4b8\/c1f3bd4b8c1b759328a0a868d08dfa5b.svg\" width=\"17\" height=\"15\"\/> such that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\\in\\mathcal{S}\" alt=\"\\ell\\in\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/afd\/76b\/8aa\/afd76b8aabd87e077e20d61308056946.svg\" width=\"44\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_\\ell\\in\\{\\mathsf {P}_1,\\ldots,\\mathsf{P}_n\\}.\" alt=\"\\mathsf{P}_\\ell\\in\\{\\mathsf {P}_1,\\ldots,\\mathsf{P}_n\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec2\/565\/590\/ec2565590c94a8d233420ff454d66694.svg\" width=\"155\" height=\"22\"\/> During the proof, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell,\" alt=\"\\ell,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a05\/6df\/b2c\/a056dfb2c5a2b74a610ddca30a4549f3.svg\" width=\"13\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_\\ell\" alt=\"s_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fdd\/fb3\/81c\/fddfb381cc158d1f11fba25be2cf16b5.svg\" width=\"17\" height=\"15\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_\\ell\" alt=\"\\mathsf{P}_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ca\/160\/c6f\/8ca160c6f17ca32cd12bfa696fe0429a.svg\" width=\"20\" height=\"20\"\/> are not revealed. The following steps are performed:<\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0cd\/a95\/927\/0cda959278dc68bc73e8b6e15750447b.svg\" width=\"14\" height=\"17\"\/> reads the current certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e06\/b1c\/a3f\/e06b1ca3f027fa308c7260b4adad4211.svg\" width=\"103\" height=\"26\"\/> and checks the DS of the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{T}.\" alt=\"\\rm{T}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04d\/532\/719\/04d532719d428406062df639adafa4f2.svg\" width=\"19\" height=\"17\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c99\/b8e\/eb0\/c99b8eeb03a226de6576a6f271e50b38.svg\" width=\"97\" height=\"20\"\/> then the session ends. If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=True,\" alt=\"\\mathfrak{B}=True,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/82d\/4a9\/393\/82d4a9393a29da8110ead99dcc32362f.svg\" width=\"90\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/38a\/04e\/d03\/38a04ed03f3b56d16204dd21c88f39d3.svg\" width=\"14\" height=\"17\"\/> chooses <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\upsilon\\in_R\\!(0,m-1]}\" alt=\"{\\upsilon\\in_R\\!(0,m-1]}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f7a\/0f2\/1f2\/f7a0f21f2480e3a5b4b810913ef6b890.svg\" width=\"124\" height=\"22\"\/> (<em>commitment<\/em>), computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{S}}\" alt=\"\\widehat{\\mathsf{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b5e\/221\/6d2\/b5e2216d2692043741a4d8059e42ae14.svg\" width=\"11\" height=\"23\"\/> (<em>witness<\/em>), checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\widehat{\\mathsf{S}}\\stackrel{?}\\neq\\infty}.\" alt=\"{\\widehat{\\mathsf{S}}\\stackrel{?}\\neq\\infty}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/30b\/04c\/4d3\/30b04c4d3ebb6591e4b18032382efa39.svg\" width=\"61\" height=\"37\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{S}}=\\infty,\" alt=\"\\widehat{\\mathsf{S}}=\\infty,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/258\/8f0\/455\/2588f0455cdb90f9c5618adb78ecfc23.svg\" width=\"61\" height=\"26\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/373\/102\/c83\/373102c835d448eab5fc024041c6aa44.svg\" width=\"14\" height=\"17\"\/> choses another <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/160\/903\/2db\/1609032db12806bdd7ab661e83d13ac9.svg\" width=\"10\" height=\"12\"\/> and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b60\/2fb\/776\/b602fb776b218f524aefa2e3456a71cf.svg\" width=\"15\" height=\"17\"\/> reads the current certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" alt=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/060\/7c0\/58f\/0607c058f81da29ad4825bed7fddf0a9.svg\" width=\"103\" height=\"26\"\/> and checks the DS of the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{T}.\" alt=\"\\rm{T}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c6\/9eb\/a78\/1c69eba789c6d96b25acc7a6ec300976.svg\" width=\"19\" height=\"17\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/edf\/af7\/f65\/edfaf7f650c7e7e3edbf671820679c25.svg\" width=\"97\" height=\"20\"\/> then the session ends. If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=True,\" alt=\"\\mathfrak{B}=True,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cec\/650\/149\/cec65014982d0ebbe9bf295aeb6967ec.svg\" width=\"90\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d6f\/ea8\/2d6\/d6fea82d6883c07db7cc2d4a99e5e7b9.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\widehat{\\mathsf{P}}_c=[s_c^{-1}]\\mathsf{P}_c=[\\gamma^{-1}\\omega\\pmod m]\\mathsf{G}_1},\" alt=\"{\\widehat{\\mathsf{P}}_c=[s_c^{-1}]\\mathsf{P}_c=[\\gamma^{-1}\\omega\\pmod m]\\mathsf{G}_1},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04d\/04f\/2f5\/04d04f2f574a6e96201c9bfbd2ec1b77.svg\" width=\"308\" height=\"26\"\/> chooses <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\phi\\in_R\\!(0, m-1]}\" alt=\"{\\phi\\in_R\\!(0, m-1]}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/595\/d1b\/8ba\/595d1b8baa5a946952973c99ff975322.svg\" width=\"125\" height=\"22\"\/> and then computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{T}}\" alt=\"\\widehat{\\mathsf{T}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/872\/222\/df8\/872222df8047fb1a51d5c227cc6e15cc.svg\" width=\"13\" height=\"22\"\/> (<em>challenge<\/em>). If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{T}}=\\infty,\" alt=\"\\widehat{\\mathsf{T}}=\\infty,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2b7\/8c1\/c43\/2b78c1c437e36065b29ab5722f854b19.svg\" width=\"63\" height=\"25\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc3\/cf6\/977\/bc3cf6977239302d1fa530df00b0ac56.svg\" width=\"15\" height=\"17\"\/> chooses another <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5f\/14b\/933\/e5f14b933808e74add1da65e4e9f7f25.svg\" width=\"11\" height=\"20\"\/> and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/076\/248\/78d\/07624878dac72bfee45bfc46ccf72a47.svg\" width=\"14\" height=\"17\"\/> checks the integrity, authenticity and relevance of public keys <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_{n+1-j},\" alt=\"\\mathsf{P}_{n+1-j},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e59\/f2b\/397\/e59f2b39728450c3b2d99da73008d81e.svg\" width=\"61\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j\\in\\widetilde{\\mathcal{S}},\" alt=\"j\\in\\widetilde{\\mathcal{S}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b9c\/1e7\/7a5\/b9c1e77a50ce9d6ab0f618a9a6acc140.svg\" width=\"52\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S }}=\\{\\mathcal{S}\\}\\setminus\\{\\ell\\},\" alt=\"\\widetilde{\\mathcal{S }}=\\{\\mathcal{S}\\}\\setminus\\{\\ell\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb8\/543\/a4e\/fb8543a4e5c3b44bde5d5923a37fe3b1.svg\" width=\"123\" height=\"25\"\/> using the appropriate certificates. If relevance is not confirmed or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ad\/101\/092\/2ad101092e5d6409c433e125bcc6bea1.svg\" width=\"97\" height=\"20\"\/> then the current session ends. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d6\/f24\/aab\/8d6f24aab14a2e2b40f7bdea27ddbaa4.svg\" width=\"14\" height=\"17\"\/> checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{T}}\\stackrel{?}\\neq\\infty.\" alt=\"\\widehat{\\mathsf{T}}\\stackrel{?}\\neq\\infty.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/709\/633\/62c\/70963362c151ccbe07565727d2425808.svg\" width=\"63\" height=\"37\"\/> If the condition is met, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/af7\/839\/7ff\/af78397ffeb58e676494d0502f14fe02.svg\" width=\"14\" height=\"17\"\/> computes <em>response<\/em> for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}\" alt=\"\\widetilde{\\mathcal{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f3\/8a3\/ce6\/6f38a3ce629fdeb57e9ee298920eb4d1.svg\" width=\"15\" height=\"21\"\/> as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\hat{g}_a=\\hat{g}_\\ell^{-1}, \\mathsf{R}\\},\" alt=\"\\{\\hat{g}_a=\\hat{g}_\\ell^{-1}, \\mathsf{R}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6d8\/8a8\/dc7\/6d88a8dc78aa2f1ac6236d58e740cc0d.svg\" width=\"120\" height=\"27\"\/> where<\/p>\n<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\hat{g}_\\ell=e_m([\\upsilon s_\\ell\\pmod m]\\widehat{\\mathsf{T}}, \\mathsf{G}_1+\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\" alt=\"\\hat{g}_\\ell=e_m([\\upsilon s_\\ell\\pmod m]\\widehat{\\mathsf{T}}, \\mathsf{G}_1+\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f11\/ee0\/644\/f11ee06445206a5ebbcbbd89ef7aceb8.svg\" width=\"637\" height=\"53\"\/><\/p>\n<p>otherwise the session ends.<\/p>\n<ol start=\"4\">\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/95e\/ad1\/629\/95ead162938e721ff4a40d88a2505b0d.svg\" width=\"15\" height=\"17\"\/> verifies the integrity, authenticity and relevance of public keys <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_{n+1-j},\" alt=\"\\mathsf{P}_{n+1-j},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7d\/6ef\/9ed\/e7d6ef9edbe861dca302b3b1201261bd.svg\" width=\"61\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j\\in\\mathcal{S},\" alt=\"j\\in\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/723\/266\/9b0\/7232669b0e5bea795dbb70dccd60b5c4.svg\" width=\"49\" height=\"20\"\/> using the appropriate certificates. If the relevance is not confirmed or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}=False,\" alt=\"\\mathfrak{B}=False,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e8\/907\/fee\/4e8907feecb2e33461675380be93bdd5.svg\" width=\"97\" height=\"20\"\/> then the current session ends. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/983\/b05\/71f\/983b0571f4ab36e8011d50a1de7afe49.svg\" width=\"15\" height=\"17\"\/> checks the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\widehat{\\mathsf{S}}\\neq\\infty)\\land((\\hat{g}_a\\neq 1)\\lor(\\hat{g}_a\\neq g)).\" alt=\"(\\widehat{\\mathsf{S}}\\neq\\infty)\\land((\\hat{g}_a\\neq 1)\\lor(\\hat{g}_a\\neq g)).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/942\/b3e\/cf3\/942b3ecf32e2d1f401e4706480b588ad.svg\" width=\"273\" height=\"27\"\/> If the condition is not met, the session ends. If it is met, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad5\/fab\/42f\/ad5fab42f4222c3f80b1f98198581271.svg\" width=\"15\" height=\"17\"\/> computes<\/p>\n<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\hat{g}_b=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}, \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}}\\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" alt=\"\\hat{g}_b=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}, \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}}\\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a36\/8cf\/72a\/a368cf72a2cb8f140a5c4fe9d62eb0d8.svg\" width=\"698\" height=\"57\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\hat{g}_c=\\hat{g}_b\\hat{g}_a=g^{\\phi\\upsilon\\omega^2(\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi\\upsilon\\omega^2\\alpha^{n+1}\\pmod m}\\text{.}\" alt=\"\\hat{g}_c=\\hat{g}_b\\hat{g}_a=g^{\\phi\\upsilon\\omega^2(\\sum_{j\\in\\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi\\upsilon\\omega^2\\alpha^{n+1}\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e8\/096\/cd5\/5e8096cd52b65186e484c8ac546df438.svg\" width=\"574\" height=\"28\"\/><\/p>\n<p>Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cdc\/e4b\/f02\/cdce4bf0285dcbdfe79b1f93287e21f0.svg\" width=\"15\" height=\"17\"\/> checks <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hat{g}_c\\stackrel{?}{=}e_m([\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}, \\mathsf{R}).\" alt=\"\\hat{g}_c\\stackrel{?}{=}e_m([\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}, \\mathsf{R}).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ef4\/230\/bdb\/ef4230bdbb72225c689f8de41b3a0e99.svg\" width=\"267\" height=\"30\"\/> If equal, then the proof is accepted, and rejected otherwise.<\/p>\n<p>If the identification stage is successfully completed, the parties independently generate a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da1\/c3f\/16e\/da1c3f16e24b96842da4691fe5f90238.svg\" width=\"14\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}=[\\upsilon s_\\ell\\pmod m]\\widehat{\\mathsf{T}}=[\\phi\\upsilon\\alpha^\\ell\\omega\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{A}=[\\upsilon s_\\ell\\pmod m]\\widehat{\\mathsf{T}}=[\\phi\\upsilon\\alpha^\\ell\\omega\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6cb\/5be\/212\/6cb5be212370345640758a7baa2cf169.svg\" width=\"401\" height=\"26\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/91b\/4c7\/9ea\/91b4c79eae52295707a56780961961f5.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}=[\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}=[\\phi\\upsilon\\alpha^\\ell\\omega\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{B}=[\\phi s_c^{-1}\\pmod m]\\widehat{\\mathsf{S}}=[\\phi\\upsilon\\alpha^\\ell\\omega\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc4\/2de\/b64\/cc42deb64a0ccec5767867a745bf058d.svg\" width=\"412\" height=\"27\"\/><\/p>\n<\/li>\n<\/ol>\n<h2>Key security<\/h2>\n<p>The idea is that the public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_i\" alt=\"\\mathsf{P}_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c80\/6f6\/933\/c806f6933dbdad08ce34d69ed1e27d43.svg\" width=\"19\" height=\"20\"\/> is masked using <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ca\/ada\/64e\/1caada64e5d8cc50b7a8fce0a3d1127e.svg\" width=\"17\" height=\"15\"\/> while the private key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i\" alt=\"s_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b84\/96f\/bff\/b8496fbff1bbf43f6a321fe2001af3f2.svg\" width=\"16\" height=\"15\"\/> is masked using <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma,\" alt=\"\\gamma,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/12a\/2eb\/a2e\/12a2eba2e73a61dd42c0acc8555c400d.svg\" width=\"16\" height=\"16\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\gamma, \\omega\\in_R\\!(0,m-1]}\" alt=\"{\\gamma, \\omega\\in_R\\!(0,m-1]}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e1f\/2bd\/269\/e1f2bd26974787de0bed2eddd80c66e2.svg\" width=\"145\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\\neq\\omega\\neq\\alpha\" alt=\"\\gamma\\neq\\omega\\neq\\alpha\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/64e\/900\/35a\/64e90035a06346ffcc1f97ec0fad29e7.svg\" width=\"86\" height=\"21\"\/> by construction. This means that the complexity of revealing all <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i\" alt=\"s_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c5\/665\/1cf\/4c56651cf81d5a38fb4674476bc4c037.svg\" width=\"16\" height=\"15\"\/> with a known ECDLP\/DLP solution for the public key from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P},\" alt=\"\\mathcal{P},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/567\/e12\/5ff\/567e125ff4ce5639864d80216b66fecc.svg\" width=\"19\" height=\"20\"\/> as well as a known private key from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{K},\" alt=\"\\mathcal{K},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0e5\/6d0\/6d5\/0e56d06d554a6bbb7cf468b6eda27772.svg\" width=\"20\" height=\"20\"\/> is not less than the complexity of finding a ECDLP\/DLP solution.<\/p>\n<p>Let&#8217;s consider a particular case. Let us assume that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_1=\\gamma\\alpha\\pmod m\" alt=\"s_1=\\gamma\\alpha\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d3\/31c\/e14\/1d331ce14e7b64540f96f94696719c7f.svg\" width=\"164\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_1=\\alpha\\omega\\pmod m\" alt=\"\\varphi_1=\\alpha\\omega\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24c\/0a4\/155\/24c0a4155ea00a4a220a6fdf6fc89df2.svg\" width=\"169\" height=\"22\"\/> are known, where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_1\" alt=\"\\varphi_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df0\/8e8\/1f9\/df08e81f91d527961557d78cde8609be.svg\" width=\"21\" height=\"16\"\/> is the ECDLP\/DLP solution subject to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_1\" alt=\"\\mathsf{P}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ee\/312\/1ad\/7ee3121addc2134f8f441f2d91ce2f89.svg\" width=\"21\" height=\"19\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{ P}_1, \\mathsf{G}_1).\" alt=\"e_m(\\mathsf{ P}_1, \\mathsf{G}_1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0e4\/697\/af3\/0e4697af3c2afed1307de9cb453d946d.svg\" width=\"95\" height=\"22\"\/> Then<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha={\\varphi_1\\omega^{-1}\\pmod m}=s_1\\gamma^{-1}\\pmod m,\" alt=\"\\alpha={\\varphi_1\\omega^{-1}\\pmod m}=s_1\\gamma^{-1}\\pmod m,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/556\/c70\/c17\/556c70c1722945afa21068baea8fba80.svg\" width=\"364\" height=\"25\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega={\\varphi_1\\alpha^{-1}\\pmod m},\" alt=\"\\omega={\\varphi_1\\alpha^{-1}\\pmod m},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0bb\/f35\/877\/0bbf35877430fc045acae62d1ac122f0.svg\" width=\"193\" height=\"25\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma=s_1\\alpha^{-1}\\pmod m\" alt=\"\\gamma=s_1\\alpha^{-1}\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/adc\/f79\/ff6\/adcf79ff6119a3727907f13ee2043cc3.svg\" width=\"183\" height=\"25\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\psi={s_1\\varphi_1^{-1}\\pmod m}=\\gamma\\omega^{-1}\\pmod m,\" alt=\"\\psi={s_1\\varphi_1^{-1}\\pmod m}=\\gamma\\omega^{-1}\\pmod m,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c80\/33d\/d26\/c8033dd267bd5b821a785f859295b7b0.svg\" width=\"355\" height=\"26\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\psi'=s_1^{-1}\\varphi_1\\pmod m=\\gamma^{-1}\\omega\\pmod m.\" alt=\"\\psi'=s_1^{-1}\\varphi_1\\pmod m=\\gamma^{-1}\\omega\\pmod m.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dba\/57a\/e71\/dba57ae71ad3d0033b10cc88de6f666d.svg\" width=\"361\" height=\"26\"\/> Consequently, if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_1\" alt=\"\\varphi_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e21\/9b1\/a0b\/e219b1a0b70433640261cf8e850f5d3a.svg\" width=\"21\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_1\" alt=\"s_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f8\/d41\/000\/8f8d41000fb438b64edb1885df685e3e.svg\" width=\"18\" height=\"14\"\/> are known, then it is enough to find <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\\lor\\gamma\\lor\\omega\" alt=\"\\alpha\\lor\\gamma\\lor\\omega\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b12\/294\/8c9\/b122948c9ecf912cdcbdea469cb7cff1.svg\" width=\"78\" height=\"19\"\/> to reveal all <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i,\" alt=\"s_i,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb0\/b93\/848\/eb0b938483db0c1b11910ace19e443b0.svg\" width=\"21\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"2\\leqslant i\\leqslant n.\" alt=\"2\\leqslant i\\leqslant n.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fbe\/b5c\/d1f\/fbeb5cd1f112b29d767f86b58e677210.svg\" width=\"85\" height=\"18\"\/><\/p>\n<p>Note that the adversary has additional capabilities. Let <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_u\" alt=\"s_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/796\/876\/61b\/79687661bc9c3ff0ce31d45de6f72c41.svg\" width=\"19\" height=\"15\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u\" alt=\"\\varphi_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b4\/c27\/5be\/7b4c275bea3ba7fa90140f7f1f623d26.svg\" width=\"22\" height=\"16\"\/> be known such that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u=2^{2^w},\" alt=\"u=2^{2^w},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4fb\/b30\/70d\/4fbb3070ddbdefbe76f46f4ef2a8ad9f.svg\" width=\"69\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\\in[2,n],\" alt=\"u\\in[2,n],\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/01d\/743\/614\/01d74361401f26de3bf083a4878ebd10.svg\" width=\"80\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"0\\leqslant w\\leqslant\\lfloor\\log_2{\\log_2 {n}}\\rfloor.\" alt=\"0\\leqslant w\\leqslant\\lfloor\\log_2{\\log_2 {n}}\\rfloor.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f7f\/18b\/264\/f7f18b264e6c3a032a5c89e53b27b3e4.svg\" width=\"182\" height=\"22\"\/> The adversary&#8217;s motivation is that with known <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u\" alt=\"\\varphi_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a65\/10a\/104\/a6510a104fb78749bad84ff0d5e6fde3.svg\" width=\"22\" height=\"16\"\/> and <img class=\"formula inline\" source=\"u>2&#8243; alt=&#187;u>2&#8243; src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c75\/ded\/48f\/c75ded48f90a63f07c613de0bd3bc1e0.svg&#187; width=&#187;46&#8243; height=&#187;16&#8243;\/> (the square root is calculated once if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u=2\" alt=\"u=2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/98a\/abd\/afd\/98aabdafd24549f6dccb108046a5a31c.svg\" width=\"46\" height=\"16\"\/>), it is possible to reveal <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\" alt=\"\\alpha\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/17f\/711\/e4f\/17f711e4fff33ac4ac42af5d22fe72ff.svg\" width=\"12\" height=\"12\"\/> using the iterative method of taking a square root using the Tonelli-Shanks algorithm of asymptotic complexity <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"O((\\log_{2}{m})^2)\" alt=\"O((\\log_{2}{m})^2)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/824\/bc6\/6da\/824bc66da478c0e90538d369b3b13566.svg\" width=\"107\" height=\"25\"\/> [C&#8217;06] (section 11.1.5). <\/p>\n<p>For example, with known <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd3\/f6d\/3aa\/cd3f6d3aa8c3a0dc6f67f366cfd008c8.svg\" width=\"17\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha=\\sqrt{\\cdots\\sqrt{\\varphi_u\\omega^{-1}\\pmod m}}\" alt=\"\\alpha=\\sqrt{\\cdots\\sqrt{\\varphi_u\\omega^{-1}\\pmod m}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e71\/ca6\/e7a\/e71ca6e7a60bb4278a3155737ee793f1.svg\" width=\"253\" height=\"51\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma={s_u\\varphi_u^{-1} \\omega\\pmod m}.\" alt=\"\\gamma={s_u\\varphi_u^{-1} \\omega\\pmod m}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03c\/1cc\/42c\/03c1cc42cd370b53b42b2a20a952afd7.svg\" width=\"202\" height=\"24\"\/> In general, it is not known how to take the root of an arbitrary degree in <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{F}_m^*.\" alt=\"\\mathbb{F}_m^*.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c94\/17e\/8f0\/c9417e8f06a2eeb430f0b995d06ed894.svg\" width=\"31\" height=\"22\"\/><\/p>\n<p>Brute force attacks for some <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u,\" alt=\"\\varphi_u,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/446\/782\/d69\/446782d691b7b4a29e1bb6947aea8d43.svg\" width=\"28\" height=\"16\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_u\" alt=\"s_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0bc\/b02\/776\/0bcb027762fa701f7d9f98407d146dab.svg\" width=\"19\" height=\"15\"\/> are listed in <a href=\"https:\/\/mega.nz\/file\/ADQUWZjD#ziBSrw07UIbzrjevTtFKGHeiDIuPtQnU2HqsuGqTwTI\" rel=\"noopener noreferrer nofollow\"><u>Appendix C<\/u><\/a>. Frontal attack (Algorithm 1) is not considered optimal, since on average it will take <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"M\/2\" alt=\"M\/2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/09e\/e86\/758\/09ee86758de766ba713a7a989be88583.svg\" width=\"40\" height=\"22\"\/> trials, where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"M=m-1.\" alt=\"M=m-1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/064\/2ee\/350\/0642ee350281a448aebcf6e6c32804bb.svg\" width=\"101\" height=\"18\"\/><\/p>\n<p>Let&#8217;s suppose that there is a number <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{a}\" alt=\"\\mathsf{a}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ce\/32c\/43e\/3ce32c43e13155bfb7f4f79446de93d0.svg\" width=\"9\" height=\"12\"\/> such that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{a}\\equiv\\varphi_u\\pmod m\" alt=\"\\mathsf{a}\\equiv\\varphi_u\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9c8\/fb2\/967\/9c8fb296778f1fb4472c72384585a3dc.svg\" width=\"155\" height=\"22\"\/> and a factorization \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{a}=\\prod_{j=1}^t\\mathsf{p}_j^{r_j}\" alt=\"\\mathsf{a}=\\prod_{j=1}^t\\mathsf{p}_j^{r_j}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b23\/9c0\/363\/b239c03638982f0c700f8904657896ba.svg\" width=\"86\" height=\"61\"\/> is known, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{p}_j\" alt=\"\\mathsf{p}_j\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/90e\/bff\/ab6\/90ebffab607f3c9bb61f317c6ac99d75.svg\" width=\"18\" height=\"19\"\/> are different primes, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{r_j,t\\in\\mathbb{N}}.\" alt=\"{r_j,t\\in\\mathbb{N}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ecf\/0d4\/50b\/ecf0d450bf2d937ee75c21ddccb06db8.svg\" width=\"75\" height=\"22\"\/> <\/p>\n<p>Such factorization can be obtained by using, for example, the <em>number field sieve<\/em> <em>method<\/em> or another well-known method [I&#8217;11]. Let the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{D}=\\{\\mathsf{p}_1^{r_1}, \\ldots, \\mathsf{p}_t^{r_t}\\}\" alt=\"\\mathcal{D}=\\{\\mathsf{p}_1^{r_1}, \\ldots, \\mathsf{p}_t^{r_t}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e20\/748\/691\/e207486913858afd59e90465dc10f953.svg\" width=\"150\" height=\"23\"\/> be given. If all <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"r_j\" alt=\"r_j\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3c7\/1ac\/ede\/3c71acedea293ba3d80f164584d84b86.svg\" width=\"16\" height=\"17\"\/> are known, then the following representation is true:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathcal{D}}=\\{\\underbrace{\\mathsf{p}^{\\mathstrut}_1,\\ldots,\\mathsf{p}^{\\mathstrut}_1}_{r_1}, \\ldots, \\underbrace{\\mathsf{p}^{\\mathstrut}_t, \\ldots, \\mathsf{p}^{\\mathstrut}_t}_{r_t}\\},\" alt=\"\\widehat{\\mathcal{D}}=\\{\\underbrace{\\mathsf{p}^{\\mathstrut}_1,\\ldots,\\mathsf{p}^{\\mathstrut}_1}_{r_1}, \\ldots, \\underbrace{\\mathsf{p}^{\\mathstrut}_t, \\ldots, \\mathsf{p}^{\\mathstrut}_t}_{r_t}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d9\/079\/469\/8d9079469217cf8983d6ebad05e8c297.svg\" width=\"265\" height=\"59\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"|\\widehat{\\mathcal{D}}|=\\sum_{j=1}^t r_j=d.\" alt=\"|\\widehat{\\mathcal{D}}|=\\sum_{j=1}^t r_j=d.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/936\/58e\/8c4\/93658e8c4defa59d6b796f821b60d04c.svg\" width=\"140\" height=\"61\"\/> <\/p>\n<p>Let us enumerate the prime numbers from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathcal{D}}\" alt=\"\\widehat{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/753\/af8\/b52\/753af8b5258d206828768b25142ef0e5.svg\" width=\"15\" height=\"22\"\/> by integers from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"1\" alt=\"1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a8\/6a7\/761\/2a86a77618f726e12447990209a895bd.svg\" width=\"10\" height=\"16\"\/> to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f6\/29f\/d49\/4f629fd495129ce7ae740cd727a52037.svg\" width=\"10\" height=\"17\"\/> and move to the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}=\\{\\tilde{\\mathsf{p}} ^{\\mathstrut}_1, \\ldots, \\tilde{\\mathsf{p}}^{\\mathstrut}_d\\}.\" alt=\"\\widetilde{\\mathcal{D}}=\\{\\tilde{\\mathsf{p}} ^{\\mathstrut}_1, \\ldots, \\tilde{\\mathsf{p}}^{\\mathstrut}_d\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba6\/b1c\/f42\/ba6b1cf42dac49298645333e08802a1d.svg\" width=\"146\" height=\"30\"\/><\/p>\n<p>Let&#8217;s estimate the complexity of the optimized brute force (Algorithm 2). The attack uses the auxiliary sequence <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbf{b}=(b_1, \\ldots, b_d),\" alt=\"\\mathbf{b}=(b_1, \\ldots, b_d),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f42\/1bd\/ff1\/f421bdff13d96584a953f16b4c8084b9.svg\" width=\"136\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"b_j\\in\\{0,1\\}.\" alt=\"b_j\\in\\{0,1\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/871\/7b9\/c19\/8717b9c1906024e61f101401cd2a1889.svg\" width=\"92\" height=\"23\"\/> The Hamming weight <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbf{b}\" alt=\"\\mathbf{b}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed9\/721\/9c5\/ed97219c5b03ad55e345c6642916f8eb.svg\" width=\"12\" height=\"17\"\/> varies in the range from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"1\" alt=\"1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c8d\/e85\/137\/c8de85137efcb2e3afa3c26810c3cf99.svg\" width=\"10\" height=\"16\"\/> to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\lceil d\/2 \\rceil\" alt=\"\\lceil d\/2 \\rceil\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0cf\/2b1\/cd4\/0cf2b1cd40b249ec21c4a9a7053eb0ad.svg\" width=\"47\" height=\"22\"\/> and the number of trials is limited above by<\/p>\n<p>                                       <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"A=\\sum_{j=1}^{\\lceil d\/2 \\rceil}C_d^j. \u00a0\\hspace{3.5cm}\\text{(1)}\" alt=\"A=\\sum_{j=1}^{\\lceil d\/2 \\rceil}C_d^j. \u00a0\\hspace{3.5cm}\\text{(1)}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9a9\/092\/0a8\/9a90920a80254eaf81c2e713ccc9c090.svg\" width=\"265\" height=\"65\"\/>                           <\/p>\n<p>On average, it takes\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"A\/2\" alt=\"A\/2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/929\/a3a\/f55\/929a3af550067f95d3d87e02b2d870e0.svg\" width=\"34\" height=\"22\"\/> trials to find <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha,\" alt=\"\\alpha,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74d\/2b3\/06e\/74d2b306e266864cf41b2760574760b6.svg\" width=\"18\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d6\/e8a\/e41\/5d6e8ae413a8fb028407a13e26c2a8d4.svg\" width=\"17\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma.\" alt=\"\\gamma.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05e\/417\/60f\/05e41760f105a41914ad890b231c86ea.svg\" width=\"16\" height=\"16\"\/><\/p>\n<p>Let&#8217;s suppose that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha=\\tilde{\\mathsf{p}}_{1}^{\\mathsf{x}}\\pmod m\" alt=\"\\alpha=\\tilde{\\mathsf{p}}_{1}^{\\mathsf{x}}\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/348\/5c5\/d0c\/3485c5d0cdca647afb9ef942b98e3517.svg\" width=\"154\" height=\"23\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega=\\tilde{\\mathsf{p}}_{2}^{\\mathsf{y}}\\pmod m,\" alt=\"\\omega=\\tilde{\\mathsf{p}}_{2}^{\\mathsf{y}}\\pmod m,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ca\/df3\/67a\/2cadf367a49dc4b9db03747710bcb5d2.svg\" width=\"159\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{x}, \\mathsf{y}\\in\\mathbb{N}.\" alt=\"\\mathsf{x}, \\mathsf{y}\\in\\mathbb{N}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/782\/7e4\/4eb\/7827e44eb1ddb9e1a02f6b31e3dcdabb.svg\" width=\"69\" height=\"20\"\/> Let us recall that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\\neq\\omega\" alt=\"\\alpha\\neq\\omega\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a8\/267\/307\/2a82673072d58347be96ea5312ef8189.svg\" width=\"50\" height=\"21\"\/> by construction, and the following options are also possible:<\/p>\n<ol>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\tilde{\\mathsf{p}}_{1}=\\tilde{\\mathsf{p}}_{2}\" alt=\"\\tilde{\\mathsf{p}}_{1}=\\tilde{\\mathsf{p}}_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bb1\/b7e\/a21\/bb1b7ea21190da6d1281c72c6fd8de72.svg\" width=\"63\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Rightarrow\" alt=\"\\Rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b91\/23e\/268\/b9123e268d60583123aae6d8adc48b6c.svg\" width=\"19\" height=\"14\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"((\\mathsf{x}\\geqslant 1)\\land(\\mathsf{y}\\geqslant \\mathsf{x}+1))\\lor((\\mathsf{y}\\geqslant 1)\\land(\\mathsf{x}\\geqslant \\mathsf{y}+1)).\" alt=\"((\\mathsf{x}\\geqslant 1)\\land(\\mathsf{y}\\geqslant \\mathsf{x}+1))\\lor((\\mathsf{y}\\geqslant 1)\\land(\\mathsf{x}\\geqslant \\mathsf{y}+1)).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/752\/cbc\/e09\/752cbce092f77594a18d60284d2ae18d.svg\" width=\"402\" height=\"22\"\/><\/p>\n<\/li>\n<li>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\tilde{\\mathsf{p}}_{1}\\neq\\tilde{\\mathsf{p}}_{2}\" alt=\"\\tilde{\\mathsf{p}}_{1}\\neq\\tilde{\\mathsf{p}}_{2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5de\/f12\/977\/5def129778824d6485ae07f3b3df60c8.svg\" width=\"63\" height=\"21\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Rightarrow\" alt=\"\\Rightarrow\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/617\/91c\/87f\/61791c87fc112738f407f5bcad72bcce.svg\" width=\"19\" height=\"14\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathsf{x}\\geqslant 1)\\land(\\mathsf{y}\\geqslant 1).\" alt=\"(\\mathsf{x}\\geqslant 1)\\land(\\mathsf{y}\\geqslant 1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f8\/538\/d09\/4f8538d09fb52b00dbd54f4f8e2ec2b9.svg\" width=\"145\" height=\"22\"\/><\/p>\n<\/li>\n<\/ol>\n<p>Let&#8217;s denote the number of primes in the range <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"[1, M]\" alt=\"[1, M]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2b9\/85d\/58e\/2b985d58eddcf4f47f43753e3b7fd395.svg\" width=\"49\" height=\"22\"\/> as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\pi(M).\" alt=\"\\pi(M).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb0\/b77\/a6d\/eb0b77a6d59802e64ba7ab7ecff74f31.svg\" width=\"52\" height=\"22\"\/> According to Chebyshev&#8217;s estimates <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{0.92\\times\\frac{M}{\\ln M}&lt;\\pi(M)&lt;1.06\\times\\frac{M}{\\ln M}}.\" alt=\"{0.92\\times\\frac{M}{\\ln M}&lt;\\pi(M)&lt;1.06\\times\\frac{M}{\\ln M}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/356\/833\/805\/356833805be67cdbbba0216833a6a09e.svg\" width=\"312\" height=\"43\"\/> Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"2&lt;d\\leqslant\\pi(M).\" alt=\"2&lt;d\\leqslant\\pi(M).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/150\/6a0\/6e0\/1506a06e0b4e6a1649da1b7eaa10e7a2.svg\" width=\"123\" height=\"22\"\/> <\/p>\n<p>It is well known that\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\sum_{j=0}^d C_d^j=2^d,\" alt=\"\\sum_{j=0}^d C_d^j=2^d,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e15\/5b8\/777\/e155b87772706d006ed37578b5df39d8.svg\" width=\"104\" height=\"62\"\/> but in (1) approximately half of all possible binomial coefficients are summed up and therefore <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"A&lt;2^d.\" alt=\"A&lt;2^d.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ef\/c09\/8c4\/2efc098c4e00bcf22518abd19eae8cf8.svg\" width=\"64\" height=\"21\"\/> Thus, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\forall_{d\\leqslant\\lceil \\log_2{M}\\rceil}A&lt;M.\" alt=\"\\forall_{d\\leqslant\\lceil \\log_2{M}\\rceil}A&lt;M.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/637\/fa3\/22e\/637fa322e0cda2600fc015fcb9db9dc0.svg\" width=\"149\" height=\"24\"\/><\/p>\n<p>The cardinality of the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/90e\/d77\/caa\/90ed77caaacfad27b566da969ca01210.svg\" width=\"15\" height=\"21\"\/> cannot be controlled if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha, \\omega\\in_R\\!(0,m-1].\" alt=\"\\alpha, \\omega\\in_R\\!(0,m-1].\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e1\/5fc\/b7b\/8e15fcb7ba279769f3eb5dbd1d25fbe9.svg\" width=\"152\" height=\"22\"\/> As a result, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b73\/d17\/113\/b73d1711304f06df45c0411eba55bcbd.svg\" width=\"10\" height=\"17\"\/> may be small and the complexity of a brute force, meaning the number of trials <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"A,\" alt=\"A,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a35\/b00\/0f8\/a35b000f8508f983e421e54a6e5c7c33.svg\" width=\"20\" height=\"20\"\/> will not provide the required security level.<\/p>\n<p>Let&#8217;s act as follows in order to improve the situation. At the setup stage, let the trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/75e\/ad4\/89d\/75ead489d199f3495fd2ecbd6170f257.svg\" width=\"14\" height=\"17\"\/> randomly select <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\\leqslant \\pi(M)\" alt=\"d\\leqslant \\pi(M)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f65\/d68\/314\/f65d68314cd3eda179eb2702eacfc771.svg\" width=\"82\" height=\"22\"\/> distinct primes from the range <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"[1, M]\" alt=\"[1, M]\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba4\/347\/0ef\/ba43470ef2c62f832855f7225d542d14.svg\" width=\"49\" height=\"22\"\/> and make the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}.\" alt=\"\\widetilde{\\mathcal{D}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/67b\/6b4\/6ca\/67b6b46ca59f487525313a973899549f.svg\" width=\"20\" height=\"21\"\/> The primality test is performed using the technique from [AKS&#8217;04]. For example, if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"m\\sim 2^{160},\" alt=\"m\\sim 2^{160},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/38b\/c22\/19e\/38bc2219edf24a4eef04343ac0646161.svg\" width=\"80\" height=\"24\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"1.2\\times10^{46} &lt; \\pi(M) &lt; 1.4\\times10^{46}.\" alt=\"1.2\\times10^{46} &lt; \\pi(M) &lt; 1.4\\times10^{46}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/20a\/059\/a14\/20a059a14aa0ad79fea32223a7772477.svg\" width=\"269\" height=\"25\"\/> Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e3\/18b\/571\/8e318b571545187195166759f3d413c8.svg\" width=\"14\" height=\"17\"\/> generates a random binary sequence <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbf{b}\" alt=\"\\mathbf{b}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03f\/f5f\/497\/03ff5f497a9f8f6ad94ba94b1230acbf.svg\" width=\"12\" height=\"17\"\/> of Hamming weight <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\lceil d\/2 \\rceil,\" alt=\"\\lceil d\/2 \\rceil,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a5\/827\/c8e\/2a5827c8e626d2fc68fae8f3b60fe995.svg\" width=\"52\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"b_j\\in_R\\!\\{0, 1\\},\" alt=\"b_j\\in_R\\!\\{0, 1\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63f\/f81\/242\/63ff8124207a9cbff92e862f8c902445.svg\" width=\"101\" height=\"23\"\/> and for a given <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{ \\mathcal{D}}\" alt=\"\\widetilde{ \\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/738\/992\/78f\/73899278fccfbc39660b45d7446b48f4.svg\" width=\"15\" height=\"21\"\/> computes:<\/p>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha=\\prod_{j=1}^d\\tilde{\\mathsf{p}}_j^{b_j}\\pmod m\" alt=\"\\alpha=\\prod_{j=1}^d\\tilde{\\mathsf{p}}_j^{b_j}\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/228\/b85\/abd\/228b85abd3ea69d26e1fab7a7330b65c.svg\" width=\"186\" height=\"62\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega=\\prod_{j=1 }^d\\tilde{\\mathsf{p}}_j^{\\bar{b}_j}\\pmod m,\" alt=\"\\omega=\\prod_{j=1 }^d\\tilde{\\mathsf{p}}_j^{\\bar{b}_j}\\pmod m,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5b\/235\/03f\/e5b23503f2c2a9b95966470fa553e4a4.svg\" width=\"192\" height=\"62\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\forall_{j\\in[1,d]}\\bar{b}_j=b_j\\oplus 1.\" alt=\"\\forall_{j\\in[1,d]}\\bar{b}_j=b_j\\oplus 1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/98d\/097\/281\/98d0972812bac9ede2092c9b2883daae.svg\" width=\"150\" height=\"26\"\/> <\/p>\n<p>Now the complexity of the brute force mentioned above is limited by the guaranteed value <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"B=C_d^{\\lceil d\/2 \\rceil}\" alt=\"B=C_d^{\\lceil d\/2 \\rceil}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c3a\/b40\/9b2\/c3ab409b22747760702d5fcee9043218.svg\" width=\"90\" height=\"30\"\/> and <img class=\"formula inline\" source=\"2^d>A>B\\geqslant\\frac{2^d}{d+1}.&#187; alt=&#187;2^d>A>B\\geqslant\\frac{2^d}{d+1}.&#187; src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/087\/c9f\/60a\/087c9f60a1c7e32fd324737425daa4a4.svg&#187; width=&#187;181&#8243; height=&#187;48&#8243;\/> <\/p>\n<p>In general, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"C_d^{[ad]}=\\left(\\frac{1}{a^a(1-a)^{1-a}}+o(1)\\right)^d,\" alt=\"C_d^{[ad]}=\\left(\\frac{1}{a^a(1-a)^{1-a}}+o(1)\\right)^d,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d54\/aa5\/191\/d54aa519161bc508c38c0b4d481c8510.svg\" width=\"276\" height=\"54\"\/> <\/p>\n<p>where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"a\\in(0,1),\" alt=\"a\\in(0,1),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/035\/093\/2de\/0350932def9069e2a5df8f72377386f7.svg\" width=\"82\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"o(1)\" alt=\"o(1)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c7\/c04\/382\/5c7c04382c751cc0a157f3300131ed8c.svg\" width=\"34\" height=\"22\"\/> is a certain function whose modulus tends to zero and can take on both negative and positive values. If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"a=1\/2\" alt=\"a=1\/2\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a5a\/926\/de9\/a5a926de9b2f04cfed13ff0e70a0aac4.svg\" width=\"65\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"B=(2+o(1))^d.\" alt=\"B=(2+o(1))^d.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99c\/f1e\/edd\/99cf1eeddf5879a73815a2b5541ec517.svg\" width=\"137\" height=\"25\"\/> For example, to ensure a <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"80\" alt=\"80\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cb8\/6ef\/31d\/cb86ef31d77eb9f2153ff5da28fb4797.svg\" width=\"19\" height=\"16\"\/>-bit security level or higher, it&#8217;s necessary to choose <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\\geqslant84.\" alt=\"d\\geqslant84.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/56f\/93a\/4e4\/56f93a4e436c9538235872e1a0c1f003.svg\" width=\"60\" height=\"19\"\/><\/p>\n<p>The complexity of finding <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\\lor\\omega\\lor\\gamma\" alt=\"\\alpha\\lor\\omega\\lor\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca6\/b72\/325\/ca6b7232507787262dea3f242cb18da7.svg\" width=\"78\" height=\"19\"\/> under the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/843\/d2a\/676\/843d2a676e0ac90a6ab63bfb8470d61d.svg\" width=\"15\" height=\"21\"\/> is equivalent to the well-known <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/908\/a85\/801\/908a85801e7df62c6b26134295c46cf2.svg\" width=\"32\" height=\"17\"\/>-complete problem <em>Subset Product<\/em> [GJ&#8217;79] (SP14, p. 224) or, in another way, <em>Product of Dimensions<\/em> [GJ&#8217;82] (MP 14, page 283). <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed5\/1a5\/69d\/ed51a569d12dc8edbaf8a6ad8c92acdb.svg\" width=\"32\" height=\"17\"\/>-completeness is proven by reducing another <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a4c\/06f\/7eb\/a4c06f7eb5390a8fa7c7ad7360bf7da1.svg\" width=\"32\" height=\"17\"\/>-complete problem known as <em>Exact Coverage by 3-Sets<\/em> [GJ&#8217;82] (TP-3, page 73) to this problem. It should be noted that MP 14 is a problem with numerical parameters and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33a\/791\/e0a\/33a791e0a4fa877cbd9b5d1896b32bba.svg\" width=\"32\" height=\"17\"\/>-completeness does not exclude solving this problem using a pseudopolynomial time complexity algorithm under the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\\neq NP\" alt=\"P\\neq NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/126\/db1\/23d\/126db123da982cf15d9c43d322ec488c.svg\" width=\"72\" height=\"21\"\/> [GJ&#8217;82] (section 4.2 on page 117, commentary to MP 14 on page 283), which depends on <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bb3\/972\/a49\/bb3972a49331946d72ab5d6fe0164072.svg\" width=\"10\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\max(\\tilde{\\mathsf{p}}_1, \\ldots, \\tilde{\\mathsf{p}}_d).\" alt=\"\\max(\\tilde{\\mathsf{p}}_1, \\ldots, \\tilde{\\mathsf{p}}_d).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b8\/125\/723\/4b81257237bce85e28087fc12d83724d.svg\" width=\"137\" height=\"22\"\/> Obviously, the existence of an algorithm of such complexity provides the adversary with additional opportunities. However, this drawback is eliminated if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63b\/8ab\/88a\/63b8ab88a2993e771cc853b600c40962.svg\" width=\"14\" height=\"17\"\/> chooses <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d14\/3d3\/0d5\/d143d30d56f7b8ca3e553dac45c3416c.svg\" width=\"10\" height=\"17\"\/> primes from the range <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"[\\lceil\\sqrt{\\mathstrut{m}}\\rceil, M],\" alt=\"[\\lceil\\sqrt{\\mathstrut{m}}\\rceil, M],\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b9\/70a\/65e\/4b970a65e860545f89db249748f6c593.svg\" width=\"98\" height=\"39\"\/> and the value of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72a\/de9\/7d7\/72ade97d7a4c1f09ef12e9afe2e29b1c.svg\" width=\"10\" height=\"17\"\/> is such that it compensates for the decrease in security level due to the existence of a pseudo-polynomial complexity algorithm. The value of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40a\/a65\/86b\/40aa6586b719f3759c6d61e0d5c69e17.svg\" width=\"10\" height=\"17\"\/> is limited below by the security level. Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/259\/773\/9ac\/2597739ac742c85384d889939dfa99aa.svg\" width=\"14\" height=\"17\"\/> can choose an arbitrarily large <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d,\" alt=\"d,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e00\/dda\/ac0\/e00ddaac079eeca8b5a80bd88bb20014.svg\" width=\"15\" height=\"20\"\/> subject to a given security level as a necessary condition. The set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/282\/b00\/58f\/282b0058fd3e0396b108c66c1d7b141f.svg\" width=\"15\" height=\"21\"\/> is created once at the setup and its cardinality, as well as the bitlength of the prime numbers included, does not affect the performance characteristics of the identification protocol. The number of primes in the mentioned range does not differ in order of magnitude from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\pi(M).\" alt=\"\\pi(M).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/135\/e8b\/1c8\/135e8b1c88009ba40d4cfc1a0ba9546f.svg\" width=\"52\" height=\"22\"\/> With <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"80\" alt=\"80\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/36f\/df9\/8e4\/36fdf98e40429ce332942edfd6be3620.svg\" width=\"19\" height=\"16\"\/>-bit security level, the length of prime numbers will vary from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"80\" alt=\"80\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/def\/27b\/bb7\/def27bbb70a0be701c81bd09030bd8f8.svg\" width=\"19\" height=\"16\"\/> to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"160\" alt=\"160\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/975\/d94\/013\/975d9401374b5467e1235b9e7550b903.svg\" width=\"29\" height=\"16\"\/> bits.<\/p>\n<p>Grover&#8217;s algorithm [G&#8217;96] allows to find <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\\lor\\omega\\lor\\gamma\" alt=\"\\alpha\\lor\\omega\\lor\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/943\/709\/765\/943709765ec21036546818d43ff8f14e.svg\" width=\"78\" height=\"19\"\/> under the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fd\/620\/628\/3fd6206284cf67b7abb3d1d285d0267d.svg\" width=\"15\" height=\"21\"\/> in <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"O(\\sqrt{B})\" alt=\"O(\\sqrt{B})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fbe\/df2\/216\/fbedf2216a293f98217ae48d62dd5a87.svg\" width=\"60\" height=\"24\"\/> trials on a quantum computer with <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"O(d)\" alt=\"O(d)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e3\/935\/2f0\/9e39352f02f13977ad206b16d374b4f2.svg\" width=\"40\" height=\"22\"\/> qubits. If a brute force on a quantum computer seems realistic, then it&#8217;s necessary to choose such a value of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/11f\/825\/c6e\/11f825c6e8f4bfd67457dd91aeb5022a.svg\" width=\"10\" height=\"17\"\/> that it could compensate for the decrease in security as a result of using Grover&#8217;s algorithm. For example, a security level of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"80\" alt=\"80\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d1b\/acc\/3ff\/d1bacc3ff76f756238df70712c467f13.svg\" width=\"19\" height=\"16\"\/> bits inclusive and higher is provided with <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"d\\geqslant 164.\" alt=\"d\\geqslant 164.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/285\/59c\/927\/28559c9276e84e255642be10d9470f5d.svg\" width=\"70\" height=\"19\"\/><\/p>\n<p>In [S&#8217;97] it is demonstrated that on a quantum computer the complexity of such intractable problems as factorization, DLP, and also ECDLP due to the existence of a bilinear mapping <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m:\\mathbb{G}_1\\times \\mathbb{G}_1\\mapsto \\mathbb {G}_3,\" alt=\"e_m:\\mathbb{G}_1\\times \\mathbb{G}_1\\mapsto \\mathbb {G}_3,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/95a\/a04\/81f\/95aa0481f156fbbd2b2826b0f92ad72f.svg\" width=\"169\" height=\"20\"\/> is limited by some polynomial of the input size.<\/p>\n<p>Let&#8217;s note that the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/699\/fe6\/e0e\/699fe6e0e2ef8c89f7ef6b07befc8ca5.svg\" width=\"15\" height=\"21\"\/> is intended solely for obtaining <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha,\" alt=\"\\alpha,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6eb\/a82\/dc0\/6eba82dc0a35266c28e4cc26be4b43d1.svg\" width=\"18\" height=\"15\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/228\/9d5\/1bf\/2289d51bfdc22cfda359a9ae5d24eca3.svg\" width=\"17\" height=\"15\"\/> on the basis of which <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_i,\" alt=\"\\mathsf{P}_i,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c0f\/564\/f80\/c0f564f8042a05a5e350646e41066fc0.svg\" width=\"24\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_i\" alt=\"s_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b15\/025\/228\/b15025228efa518e3d15b7f460151cec.svg\" width=\"16\" height=\"15\"\/> are then computed. Once all necessary computations are complete, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T\" alt=\"T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/217\/ee7\/9e2\/217ee79e2454d62bd2a22043b3716783.svg\" width=\"14\" height=\"17\"\/> removes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{D}}\" alt=\"\\widetilde{\\mathcal{D}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/37f\/c23\/29f\/37fc2329f96db754aa9c50bd9aa9bac9.svg\" width=\"15\" height=\"21\"\/> from local long-term memory.<\/p>\n<h2>Why does it work<\/h2>\n<p>It&#8217;s worth noting that the anonymous group identification protocol is based on the ideas revealed in [BGW&#8217;05].<\/p>\n<p>Let&#8217;s dive inside it and look at the function <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\eta=n+1-j+\\ell},\" alt=\"{\\eta=n+1-j+\\ell},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed4\/5ec\/6ef\/ed45ec6effad47d282c6b9dcd232fba7.svg\" width=\"149\" height=\"21\"\/> which appears in the exponent of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha\" alt=\"\\alpha\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/837\/f72\/955\/837f729552847b7d667c58c50c097f37.svg\" width=\"12\" height=\"12\"\/> when <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_\\ell\" alt=\"g_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8b2\/a73\/633\/8b2a73633ea2f67b7959d8325cad449e.svg\" width=\"17\" height=\"15\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_b,\" alt=\"g_b,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f15\/9f6\/443\/f159f64436d79cf0c613c8bf549f0690.svg\" width=\"22\" height=\"15\"\/> as well as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hat{g}_ \\ell\" alt=\"\\hat{g}_ \\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/788\/64b\/ab5\/78864bab5f59b3afe9faa312271a3fc5.svg\" width=\"18\" height=\"21\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hat{g}_b\" alt=\"\\hat{g}_b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc0\/7f2\/cbe\/cc07f2cbe0b55f594bf47ba5cd570f6d.svg\" width=\"18\" height=\"21\"\/> being computed.<\/p>\n<p>The function <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\eta\" alt=\"\\eta\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ab2\/5e6\/a93\/ab25e6a93dc272b090f0f49755a7b29f.svg\" width=\"10\" height=\"16\"\/> is continuous, and, for analysis purposes, it is enough to look at the Table #1 containing values for some enumerators from the integer interval <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"[1, n].\" alt=\"[1, n].\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c6d\/941\/fb2\/c6d941fb26d3533a7c4dac1b70dd3dd3.svg\" width=\"46\" height=\"22\"\/><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fe7\/ec4\/4de\/fe7ec44def8457e8ff8ffcb558896621.png\" width=\"590\" height=\"251\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe7\/ec4\/4de\/fe7ec44def8457e8ff8ffcb558896621.png\"\/><\/figure>\n<p>Let <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}=\\{1,\\ldots,n\\},\" alt=\"\\mathcal{S}=\\{1,\\ldots,n\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7e\/f2c\/1fd\/b7ef2c1fd387638e58b1dc7655bd4458.svg\" width=\"127\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\\in \\mathcal{S}\" alt=\"\\ell\\in \\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/738\/348\/97a\/73834897a78f1227cefe969736f74f46.svg\" width=\"44\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}=\\{\\mathcal{S} \\}\\setminus\\{\\ell\\}.\" alt=\"\\widetilde{\\mathcal{S}}=\\{\\mathcal{S} \\}\\setminus\\{\\ell\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f7\/b58\/b2b\/7f7b58b2b1203be405fe13cff3dbd7f3.svg\" width=\"123\" height=\"25\"\/> According to the Table 1, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\eta=n+1\" alt=\"\\eta=n+1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/204\/d49\/99d\/204d4999d051d6425d302a152fd046f8.svg\" width=\"80\" height=\"20\"\/> is located on the main diagonal and meet the criteria <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j=\\ell,\" alt=\"j=\\ell,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dfa\/ff3\/0d1\/dfaff30d1917402320bcc294ea22b90b.svg\" width=\"47\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\\neq 0\" alt=\"\\ell\\neq 0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/447\/cb2\/ba5\/447cb2ba5af7b694847be95313b68bf0.svg\" width=\"43\" height=\"21\"\/> by construction and therefore <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\eta\\in[2,2n].\" alt=\"\\eta\\in[2,2n].\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/af8\/59f\/e81\/af859fe81b40b7f4938c2c1be06b29a6.svg\" width=\"89\" height=\"22\"\/> <\/p>\n<p>Since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}\" alt=\"\\widetilde{\\mathcal{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/70f\/2ac\/176\/70f2ac176be46840b22ebd10252beb9e.svg\" width=\"15\" height=\"21\"\/> lacks the <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\" alt=\"\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/37c\/83f\/558\/37c83f5581fc8d36116acd34db07b210.svg\" width=\"8\" height=\"17\"\/>th numerator, but <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}\" alt=\"\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f6\/1bf\/0d8\/2f61bf0d84632654340900c99a847c88.svg\" width=\"12\" height=\"17\"\/> contains the numerator <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j=\\ell,\" alt=\"j=\\ell,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d6\/a22\/9be\/4d6a229bef88e588fbaf9390660c47ca.svg\" width=\"47\" height=\"20\"\/> then<\/p>\n<p> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell}=\\alpha^{n+1}.\" alt=\"\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}}}\\alpha^{n+1-j+\\ell}=\\alpha^{n+1}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c15\/c40\/50b\/c15c4050b8ae07c3e47a4e3aa1b9286d.svg\" width=\"301\" height=\"51\"\/><\/p>\n<p>In <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S},\" alt=\"\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/860\/39d\/eea\/86039deea2f4b3533459fbe2ab26d59b.svg\" width=\"18\" height=\"20\"\/> the non-decreasing order of the numerators is chosen to simplify explanations. It&#8217;s worth noting that the protocol is invariant regarding this order. Moreover, the protocol works correctly with the subset <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S}.\" alt=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e1\/2bf\/5d3\/5e12bf5d36c7e3f3ec760109f4a0b34a.svg\" width=\"66\" height=\"22\"\/> The asymptotic estimate for the number of such subsets is <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"O(2^n).\" alt=\"O(2^n).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0ee\/3cc\/d35\/0ee3ccd35ab067d68b79e46ba10b830e.svg\" width=\"55\" height=\"22\"\/> These subsets may either intersect or not.<\/p>\n<h2>Example<\/h2>\n<p>Let&#8217;s suppose that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}=\\{1,2,3,\\ldots,8,9,10\\}\" alt=\"\\mathcal{S}=\\{1,2,3,\\ldots,8,9,10\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/786\/1f7\/1fc\/7861f71fceeefd5db1ab4b10f8d830e0.svg\" width=\"202\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(n+1)=11.\" alt=\"(n+1)=11.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b8a\/b70\/5fb\/b8ab705fb817cb51c9498d35cbfe5964.svg\" width=\"110\" height=\"22\"\/> There is some subset <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\mathcal{S}_\\wp\\subset\\mathcal{S}}\" alt=\"{\\mathcal{S}_\\wp\\subset\\mathcal{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43b\/8b1\/849\/43b8b1849f7468912410dd2c7ce3b363.svg\" width=\"60\" height=\"22\"\/> such that<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}_\\wp=\\{3,7,5,8,4,2\\}.\" alt=\"\\mathcal{S}_\\wp=\\{3,7,5,8,4,2\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c4d\/b68\/396\/c4db68396b6bbde16167775ba2cf0633.svg\" width=\"173\" height=\"23\"\/> Let <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell=7,\" alt=\"\\ell=7,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f42\/92e\/d75\/f4292ed7558b27f47a28c251de853826.svg\" width=\"49\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathcal{S}}_\\wp=\\{3,5,8,4,2\\}.\" alt=\"\\widetilde{\\mathcal{S}}_\\wp=\\{3,5,8,4,2\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6c\/c0f\/6c9\/b6cc0f6c900a7858bc0920dff1602cbc.svg\" width=\"158\" height=\"26\"\/> Therefore, <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\sum_{j\\in\\mathcal{S}_\\wp}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}_\\wp}}\\alpha^{n+1-j+\\ell}=\" alt=\"\\sum_{j\\in\\mathcal{S}_\\wp}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{\\mathcal{S}_\\wp}}\\alpha^{n+1-j+\\ell}=\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/145\/209\/f9c\/145209f9cff397a205d6056d302e2c57.svg\" width=\"256\" height=\"53\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-3+7}+\" alt=\"\\alpha^{11-3+7}+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d70\/e38\/6cf\/d70e386cf88d7b8c01f3869d29ba7387.svg\" width=\"78\" height=\"22\"\/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-7+7}+\" alt=\"\\alpha^{11-7+7}+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/234\/15d\/576\/23415d57610701765eb3fd9b11170e37.svg\" width=\"78\" height=\"22\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-5+7}+\" alt=\"\\alpha^{11-5+7}+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f88\/1b8\/965\/f881b8965f1c28730e09dfd8dab473ef.svg\" width=\"78\" height=\"22\"\/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-8+7}+\" alt=\"\\alpha^{11-8+7}+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c8f\/d76\/bf2\/c8fd76bf28e0ef0475875a3bf219858d.svg\" width=\"78\" height=\"22\"\/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-4+7}+\" alt=\"\\alpha^{11-4+7}+\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/34b\/b8d\/1f6\/34bb8d1f6564cb61e5f986e1de937ec1.svg\" width=\"78\" height=\"22\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-2+7}-\" alt=\"\\alpha^{11-2+7}-\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/526\/041\/3e6\/5260413e644032e4eccf2e973a526b67.svg\" width=\"78\" height=\"22\"\/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-3+7}-\" alt=\"\\alpha^{11-3+7}-\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c8d\/b32\/023\/c8db32023951edc835283c4e812df042.svg\" width=\"78\" height=\"22\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-5+7}-\" alt=\"\\alpha^{11-5+7}-\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ed\/667\/ac4\/6ed667ac43e21bbb1f3bce2bd7cf3a58.svg\" width=\"78\" height=\"22\"\/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-8+7}-\" alt=\"\\alpha^{11-8+7}-\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6d2\/06c\/934\/6d206c93492562db72d8d39691a7cc43.svg\" width=\"78\" height=\"22\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-4+7}-\" alt=\"\\alpha^{11-4+7}-\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb7\/043\/3c4\/fb70433c44452a2ae4cfc2b77d08fa3e.svg\" width=\"78\" height=\"22\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\alpha^{11-2+7}=\\alpha^{11}.\" alt=\"\\alpha^{11-2+7}=\\alpha^{11}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/244\/bb4\/f92\/244bb4f9219e182e4726c339f68ce224.svg\" width=\"122\" height=\"21\"\/><\/p>\n<h2>Preliminary analysis<\/h2>\n<p>Let&#8217;s suppose that the adversary knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\" alt=\"\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e94\/fd9\/498\/e94fd9498827a9a59c57a01d6a3ee1f7.svg\" width=\"8\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_\\ell\" alt=\"\\varphi_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/216\/b77\/773\/216b7777366f732f8d3f31d1c6e814a3.svg\" width=\"20\" height=\"16\"\/> is a ECDLP\/DLP solution subject to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_\\ell\" alt=\"\\mathsf{P}_\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea1\/742\/762\/ea1742762ddaa1a5f11066e4b88b2192.svg\" width=\"20\" height=\"20\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{P}_\\ell, \\mathsf{G}_1).\" alt=\"e_m(\\mathsf{P}_\\ell, \\mathsf{G}_1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/152\/453\/3f3\/1524533f39580cc0e0543f391b249caf.svg\" width=\"93\" height=\"22\"\/> Then in <strong>Protocol 1<\/strong> the adversary on behalf of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/546\/085\/156\/5460851567a8b5e9545cf1e655e4214c.svg\" width=\"14\" height=\"17\"\/> computes <em>witness<\/em> as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}'={[\\upsilon \\varphi_\\ell \\pmod m]\\mathsf{P}_V}= [\\upsilon\\alpha^\\ell\\omega \\mathbf{y}\\pmod m] \\mathsf{G}_1.\" alt=\"\\mathsf{S}'={[\\upsilon \\varphi_\\ell \\pmod m]\\mathsf{P}_V}= [\\upsilon\\alpha^\\ell\\omega \\mathbf{y}\\pmod m] \\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cb1\/ae7\/d06\/cb1ae7d06e7b6cb5af3f99f1d694226e.svg\" width=\"420\" height=\"25\"\/> Moreover, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c9\/a00\/f9a\/5c9a00f9a8d358503cc75528b90a9911.svg\" width=\"14\" height=\"17\"\/> computes <em>response<\/em> as<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\acute{g}_a=\\acute{g}_\\ell^{-1},\" alt=\"\\{\\acute{g}_a=\\acute{g}_\\ell^{-1},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b08\/3fb\/500\/b083fb50025ef0fb40e79258c5c36a30.svg\" width=\"90\" height=\"26\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R}'=[\\varphi_\\ell^{-1}]\\mathsf{Q}=[\\gamma\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\\},\" alt=\"\\mathsf{R}'=[\\varphi_\\ell^{-1}]\\mathsf{Q}=[\\gamma\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/53e\/6d6\/2c3\/53e6d62c357b93fd0640ce10708fe235.svg\" width=\"338\" height=\"27\"\/> where<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_\\ell=e_m([\\upsilon \\varphi_\\ell\\pmod m] \\mathsf{T},\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" alt=\"\\acute{g}_\\ell=e_m([\\upsilon \\varphi_\\ell\\pmod m] \\mathsf{T},\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e1e\/238\/e8d\/e1e238e8dc7c80e9746e0a53dda920cf.svg\" width=\"660\" height=\"53\"\/><\/p>\n<p>In its turn, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ac\/8a7\/9a4\/1ac8a79a4d5ba387a7d66a18e921445c.svg\" width=\"15\" height=\"17\"\/> computes<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_b=e_m([\\mathbf{y}^\\phi\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" alt=\"\\acute{g}_b=e_m([\\mathbf{y}^\\phi\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e6\/3f0\/5b5\/6e63f05b5047f982ccae1a2922631678.svg\" width=\"698\" height=\"57\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_c=\\acute{g}_b\\acute{g}_a=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega^2(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega^2\\alpha^{n+1}\\pmod m}\\text{.}\" alt=\"\\acute{g}_c=\\acute{g}_b\\acute{g}_a=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega^2(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega^2\\alpha^{n+1}\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/602\/ba8\/fec\/602ba8fec95381daf58283c0ea6ba47f.svg\" width=\"614\" height=\"28\"\/><\/p>\n<p>Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\grave{g}=e_m([\\mathbf{y}^\\phi\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{R}')=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega\\gamma\\alpha^{n+1}\\pmod m}\" alt=\"\\grave{g}=e_m([\\mathbf{y}^\\phi\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{R}')=g^{\\upsilon\\mathbf{y}^{\\phi+1}\\omega\\gamma\\alpha^{n+1}\\pmod m}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c3\/390\/291\/0c3390291b09cbd63c122baef0b10a93.svg\" width=\"427\" height=\"27\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=\\grave{g}\" alt=\"\\acute{g}_c=\\grave{g}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1e2\/b59\/cae\/1e2b59caede7404cd15fcbfac3329b9e.svg\" width=\"54\" height=\"21\"\/> with v.s.p.<\/p>\n<p>In order to deceive the verifier, the adversary needs to reveal <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\" alt=\"\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/439\/1e9\/e2e\/4391e9e2e7cc92067ea0ab00be46df93.svg\" width=\"10\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e0a\/f5e\/a10\/e0af5ea10dca688870e1a1c32090b3b2.svg\" width=\"17\" height=\"15\"\/> then<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R}'={[\\gamma^{-1}\\omega\\varphi_\\ell^{-1}\\pmod m]\\mathsf{Q}}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{R}'={[\\gamma^{-1}\\omega\\varphi_\\ell^{-1}\\pmod m]\\mathsf{Q}}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fee\/d7d\/892\/feed7d89241cb1e1c37e8289914ac2bb.svg\" width=\"463\" height=\"27\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=\\grave{g}.\" alt=\"\\acute{g}_c=\\grave{g}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c63\/193\/8f4\/c631938f42bfc2a396818997edd7c7dd.svg\" width=\"59\" height=\"21\"\/><\/p>\n<p>In <strong>Protocol 2<\/strong> <em>witness<\/em> and <em>response<\/em> are computed as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{S}}'=[\\upsilon\\varphi_\\ell \\pmod m]\\mathsf{P}_c= {[\\upsilon\\omega^2\\alpha^{c+\\ell}\\pmod m] \\mathsf{G}_1}\" alt=\"\\widehat{\\mathsf{S}}'=[\\upsilon\\varphi_\\ell \\pmod m]\\mathsf{P}_c= {[\\upsilon\\omega^2\\alpha^{c+\\ell}\\pmod m] \\mathsf{G}_1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc0\/3b0\/167\/cc03b016750cff6fb5e55cf9bb9fb0e5.svg\" width=\"424\" height=\"29\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\check{g}_a=\\check{g}_\\ell^{-1},\" alt=\"\\{\\check{g}_a=\\check{g}_\\ell^{-1},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/384\/0fb\/0ef\/3840fb0ef531271a344f4ce21f881bc4.svg\" width=\"90\" height=\"26\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R}'=[\\varphi_\\ell^{-1}]\\mathsf{Q}=[\\gamma\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\\},\" alt=\"\\mathsf{R}'=[\\varphi_\\ell^{-1}]\\mathsf{Q}=[\\gamma\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f12\/614\/da3\/f12614da3b1c5cfba31782f1d04bc7fe.svg\" width=\"338\" height=\"27\"\/> respectively, where<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\check{g}_\\ell=e_m([\\upsilon \\varphi_\\ell\\pmod m]\\widehat{ \\mathsf{T}},\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\gamma^{-1}\\omega^2(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" alt=\"\\check{g}_\\ell=e_m([\\upsilon \\varphi_\\ell\\pmod m]\\widehat{ \\mathsf{T}},\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\gamma^{-1}\\omega^2(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a3a\/61a\/6d5\/a3a61a6d5f30c6d3cea712d23301d2ba.svg\" width=\"668\" height=\"53\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/09f\/10a\/8bb\/09f10a8bbdcaa68d1ae252a7e0cfef7d.svg\" width=\"15\" height=\"17\"\/> computes<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\check{g}_b=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{ \\mathsf{S}}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\gamma^{-1}\\omega^2(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" alt=\"\\check{g}_b=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{ \\mathsf{S}}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi\\upsilon\\gamma^{-1}\\omega^2(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f33\/c03\/a8c\/f33c03a8cbe31a75c56cb991877a4173.svg\" width=\"698\" height=\"59\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\check{g}_c=\\check{g}_b\\check{g}_a=g^{\\phi\\upsilon\\gamma^{-1}\\omega^3(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi\\upsilon\\gamma^{-1}\\omega^3\\alpha^{n+1}\\pmod m}\\text{.}\" alt=\"\\check{g}_c=\\check{g}_b\\check{g}_a=g^{\\phi\\upsilon\\gamma^{-1}\\omega^3(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi\\upsilon\\gamma^{-1}\\omega^3\\alpha^{n+1}\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27f\/81e\/435\/27f81e43587a2a7b01f87335aa1cbcb0.svg\" width=\"617\" height=\"28\"\/><\/p>\n<p>Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\bar{g}=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{ \\mathsf{S}}',\u00a0 \\mathsf{R}')=g^{\\phi\\upsilon\\omega^2\\alpha^{n+1}\\pmod m}\" alt=\"\\bar{g}=e_m([\\phi s_c^{-1}\\pmod m]\\widehat{ \\mathsf{S}}',\u00a0 \\mathsf{R}')=g^{\\phi\\upsilon\\omega^2\\alpha^{n+1}\\pmod m}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1db\/f15\/efc\/1dbf15efc5e4771adc04689e1796fffa.svg\" width=\"424\" height=\"29\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\check{g}_c=\\bar{g}\" alt=\"\\check{g}_c=\\bar{g}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27e\/45a\/25f\/27e45a25f8f2285d9cf3573968bc2163.svg\" width=\"54\" height=\"20\"\/> with v.s.p.<\/p>\n<p>In order to deceive the verifier, the adversary needs to reveal <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\" alt=\"\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b4f\/9ec\/5a5\/b4f9ec5a530adc9bcf94b75ac010d799.svg\" width=\"10\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac4\/9c7\/285\/ac49c728583ebaedfcf2a6c20e832e2b.svg\" width=\"17\" height=\"15\"\/> then<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R}'={[\\gamma^{-1}\\omega\\varphi_\\ell^{-1}\\pmod m]\\mathsf{Q}}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{R}'={[\\gamma^{-1}\\omega\\varphi_\\ell^{-1}\\pmod m]\\mathsf{Q}}=[\\omega\\alpha^{n+1-\\ell}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d0\/c63\/5d4\/1d0c635d4287314f2b25fe6f7e08e597.svg\" width=\"463\" height=\"27\"\/> \u0438 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\check{g}_c=\\bar{g}.\" alt=\"\\check{g}_c=\\bar{g}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8b7\/ea2\/f38\/8b7ea2f380a67af7fb9faf6f23c825aa.svg\" width=\"59\" height=\"20\"\/><\/p>\n<p>Let&#8217;s recall that, in order to reveal <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\" alt=\"\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b47\/1c5\/339\/b471c53390bea8007f15e9d937b927f2.svg\" width=\"10\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega,\" alt=\"\\omega,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b3\/6d1\/76e\/4b36d176e5451f81f1f2ce615e9b11b6.svg\" width=\"17\" height=\"15\"\/> it&#8217;s necessary to find a solution to a specific <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a8\/e8d\/c79\/8a8e8dc79517bcc791a41be52f85ef4e.svg\" width=\"32\" height=\"17\"\/>-complete problem given the known <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u\" alt=\"\\varphi_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e60\/ed9\/785\/e60ed978517e5bd6b5a2cd2519f06b90.svg\" width=\"22\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_u.\" alt=\"s_u.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5c\/9e2\/545\/c5c9e2545faadaa4bb0551f999f6ec78.svg\" width=\"24\" height=\"15\"\/><\/p>\n<p>Let a malicious verifier <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V'\" alt=\"V'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aca\/44b\/aff\/aca44baffad411446e976f9d596d6936.svg\" width=\"22\" height=\"19\"\/> owns the key pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathbf{\\acute{y}},\\mathsf{P}_{V'}=[\\mathbf{\\acute{y}}]\\mathsf{G} _1\\}.\" alt=\"\\{\\mathbf{\\acute{y}},\\mathsf{P}_{V'}=[\\mathbf{\\acute{y}}]\\mathsf{G} _1\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a88\/b46\/47b\/a88b4647b646fc1801368b1ec720757d.svg\" width=\"144\" height=\"22\"\/> Let&#8217;s evaluate potential risks associated with impersonating the verifier, namely replacing <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0dc\/aea\/e10\/0dcaeae10b757be8aef0e17b1979ba0b.svg\" width=\"15\" height=\"17\"\/> with <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V'.\" alt=\"V'.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a5c\/c57\/64a\/a5cc5764ac5a38757260e76b469b58e2.svg\" width=\"27\" height=\"19\"\/><\/p>\n<h2>Protocol 1<\/h2>\n<p>To impersonate the verifier, it is necessary to find a ECDLP\/DLP solution subject to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_V\" alt=\"\\mathsf{P}_V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e89\/c71\/921\/e89c71921f86885a922d98d24b111d67.svg\" width=\"25\" height=\"20\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{P}_V, \\mathsf{G}_1).\" alt=\"e_m(\\mathsf{P}_V, \\mathsf{G}_1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40e\/41e\/00a\/40e41e00a66c20114edb1ea05b13b4f9.svg\" width=\"98\" height=\"22\"\/> Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}'=[\\mathbf{y}^{-1}\\mathbf{\\acute{y}}\\pmod m]\\mathsf{S}={[\\upsilon s_\\ell\\pmod m] \\mathsf{P}_{V'}}.\" alt=\"\\mathsf{S}'=[\\mathbf{y}^{-1}\\mathbf{\\acute{y}}\\pmod m]\\mathsf{S}={[\\upsilon s_\\ell\\pmod m] \\mathsf{P}_{V'}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/20d\/e29\/17b\/20de2917b1b6dd214fe34fa4fe02bb4e.svg\" width=\"399\" height=\"25\"\/> The relationship between ECDLP and DLP is explained in <a href=\"https:\/\/mega.nz\/file\/MCARjYKA#rsylBNfuCUpRQ8ERy-7F6b2aTL3F8vs30IEYKuHy68o\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>.<\/p>\n<p>Let&#8217;s assume that the ECDLP\/DLP solution mentioned above is not known. However, the adversary has access to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_{V'}\" alt=\"\\mathsf{P}_{V'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b0c\/ca9\/9d0\/b0cca99d009e2a698a3e3ca4c378876c.svg\" width=\"30\" height=\"21\"\/> and is able to impose <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}'=[\\phi']\\mathsf{P}_{V'}\" alt=\"\\mathsf{T}'=[\\phi']\\mathsf{P}_{V'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a68\/d0f\/07f\/a68d0f07f36d4896cb9a9432fcc5c99b.svg\" width=\"102\" height=\"23\"\/> instead of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}\" alt=\"\\mathsf{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f0\/df9\/4f1\/5f0df94f18eded668e61167fa9de1c37.svg\" width=\"13\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}'=[\\upsilon']\\mathsf{P}_{V'}\" alt=\"\\mathsf{S}'=[\\upsilon']\\mathsf{P}_{V'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/510\/081\/4bc\/5100814bcf159dd843d330d7e3d38353.svg\" width=\"98\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}\" alt=\"\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6d\/eeb\/ced\/a6deebced1f52e6e7a427f7c4713c695.svg\" width=\"11\" height=\"17\"\/> instead of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S},\" alt=\"\\mathsf{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c71\/e30\/c44\/c71e30c44f73e6a1a599a46ba309f141.svg\" width=\"16\" height=\"20\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi'=\\mathbf{y}^\\phi\\pmod m\" alt=\"\\phi'=\\mathbf{y}^\\phi\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a6\/2cf\/dc2\/7a62cfdc223e5cefebbc0b65daa754f8.svg\" width=\"162\" height=\"25\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon'=\\upsilon s_\\ell\\pmod m\" alt=\"\\upsilon'=\\upsilon s_\\ell\\pmod m\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f64\/a8a\/7cd\/f64a8a7cd53bf6b0d9a4e0434070f163.svg\" width=\"166\" height=\"23\"\/> with v.s.p. Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/606\/789\/e9f\/606789e9fc560c5694eed505998ade50.svg\" width=\"14\" height=\"17\"\/> computes <em>response<\/em> as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_a=\\acute{g}_\\ell^{-1},\" alt=\"\\acute{g}_a=\\acute{g}_\\ell^{-1},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b5\/7e9\/106\/6b57e9106b7c533d368a658033d539c9.svg\" width=\"80\" height=\"26\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R},\" alt=\"\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf3\/f92\/b6c\/bf3f92b6c35de47d2f67895fe6e21dc5.svg\" width=\"18\" height=\"20\"\/> where<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_\\ell=e_m([\\upsilon s_\\ell\\pmod m] \\mathsf{T}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon\\gamma\\acute{\\mathbf{y}}(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" alt=\"\\acute{g}_\\ell=e_m([\\upsilon s_\\ell\\pmod m] \\mathsf{T}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon\\gamma\\acute{\\mathbf{y}}(\\alpha^\\ell+\\omega\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{.}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d5b\/2e6\/944\/d5b2e69442d6c54489a7f08ed995cb68.svg\" width=\"654\" height=\"53\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V'\" alt=\"V'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a65\/792\/8af\/a657928af64e37c064e10b11f2047781.svg\" width=\"22\" height=\"19\"\/> computes<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_b=e_m([\\phi'\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon'\\acute{\\mathbf{y}}(1+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j})\\pmod m}\" alt=\"\\acute{g}_b=e_m([\\phi'\\pmod m] \\mathsf{S}',\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon'\\acute{\\mathbf{y}}(1+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j})\\pmod m}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a5\/481\/c52\/3a5481c527d9c388229e826a457e1e4d.svg\" width=\"612\" height=\"49\"\/><\/p>\n<p>and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=\\acute{g}_a\\acute{g}_b.\" alt=\"\\acute{g}_c=\\acute{g}_a\\acute{g}_b.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/076\/87d\/58f\/07687d58f1588d948a6e9d18a3f43012.svg\" width=\"86\" height=\"21\"\/> Obviously, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=g_c\" alt=\"\\acute{g}_c=g_c\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b51\/bb4\/69a\/b51bb469a6ee72669205c454429ccd2e.svg\" width=\"61\" height=\"21\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=e_m([\\phi'] \\mathsf{S}',\u00a0 \\mathsf{R})\" alt=\"\\acute{g}_c=e_m([\\phi'] \\mathsf{S}',\u00a0 \\mathsf{R})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/11d\/f4a\/ab4\/11df4aab4fac4b931931e919f2c96dcd.svg\" width=\"147\" height=\"24\"\/> with v.s.p.<\/p>\n<p>Let&#8217;s assume that the adversary imposes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widetilde{\\mathsf{T}} = [\\phi']\\mathsf{P}_V,\" alt=\"\\widetilde{\\mathsf{T}} = [\\phi']\\mathsf{P}_V,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6dd\/1de\/f2a\/6dd1def2a5d051acfebde6bcacdc4361.svg\" width=\"97\" height=\"25\"\/> but doesn&#8217;t substitute <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S},\" alt=\"\\mathsf{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/682\/ca7\/cc3\/682ca7cc309c027869d53dcce6b4fc56.svg\" width=\"16\" height=\"20\"\/> then<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_b=e_m([\\phi'\\pmod m] \\mathsf{S},\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon\\gamma\\mathbf{y}(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" alt=\"\\acute{g}_b=e_m([\\phi'\\pmod m] \\mathsf{S},\u00a0 \\mathsf{G}_1+\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j})=g^{\\phi'\\upsilon\\gamma\\mathbf{y}(\\alpha^\\ell+\\omega\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell})\\pmod m}\\text{,}\\\\\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/922\/c6c\/428\/922c6c428ef53bb925f2cd02c916c1a6.svg\" width=\"698\" height=\"57\"\/><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\acute{g}_c=\\acute{g}_b\\acute{g}_a=g^{\\phi'\\upsilon\\mathbf{y}\\gamma\\omega(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi'\\upsilon\\gamma\\mathbf{y}\\omega\\alpha^{n+1}\\pmod m}.\" alt=\"\\acute{g}_c=\\acute{g}_b\\acute{g}_a=g^{\\phi'\\upsilon\\mathbf{y}\\gamma\\omega(\\sum_{j\\in \\mathcal{S}}\\alpha^{n+1-j+\\ell}-\\sum_{j\\in\\widetilde{ \\mathcal{S}}}\\alpha^{n+1-j+\\ell})\\pmod m}=g^{\\phi'\\upsilon\\gamma\\mathbf{y}\\omega\\alpha^{n+1}\\pmod m}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f6\/257\/371\/7f625737108c7f4a20bf2e896ef8a972.svg\" width=\"601\" height=\"28\"\/><\/p>\n<p>If the final check is performed by <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V,\" alt=\"V,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/204\/85c\/ff6\/20485cff6b97901f402dc1690a506417.svg\" width=\"20\" height=\"20\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=e_m([\\mathbf{y}^{\\phi}\\pmod m] \\mathsf{S}, \\mathsf{R})\" alt=\"\\acute{g}_c=e_m([\\mathbf{y}^{\\phi}\\pmod m] \\mathsf{S}, \\mathsf{R})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f5\/119\/d21\/0f5119d219e0cd52eefb9b92efeb4cb4.svg\" width=\"243\" height=\"25\"\/> with v.s.p. If such a check is performed by someone who knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi',\" alt=\"\\phi',\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72f\/dde\/beb\/72fddebebdddcdcca1d94e0dfa65f857.svg\" width=\"23\" height=\"22\"\/> for example <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V',\" alt=\"V',\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b0d\/582\/e87\/b0d582e873d455a5794ac8d4dcfcde31.svg\" width=\"27\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{g}_c=e_m([\\phi'] \\mathsf{S}, \\mathsf{R}).\" alt=\"\\acute{g}_c=e_m([\\phi'] \\mathsf{S}, \\mathsf{R}).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/527\/769\/758\/52776975862b376f9b37e0818ef0dff2.svg\" width=\"147\" height=\"23\"\/> However, despite the fact that the proof is accepted by <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V',\" alt=\"V',\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/56c\/0fd\/e7d\/56c0fde7d52d1bdd2402799b44dda41a.svg\" width=\"27\" height=\"22\"\/> impersonation does not take place, since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ed9\/a58\/0d9\/ed9a580d99abc7ecfc601be02a78f0ff.svg\" width=\"15\" height=\"17\"\/> is not substituted.<\/p>\n<p>Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24c\/44d\/8c6\/24c44d8c65cc0826d5564dfc53a0041d.svg\" width=\"14\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}'=[\\upsilon s_\\ell\\pmod m]\\mathsf{T}'=[\\upsilon s_\\ell\\mathbf{y}\\phi'\\pmod m]\\mathsf {G}_1\" alt=\"\\mathsf{A}'=[\\upsilon s_\\ell\\pmod m]\\mathsf{T}'=[\\upsilon s_\\ell\\mathbf{y}\\phi'\\pmod m]\\mathsf {G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dab\/594\/e3d\/dab594e3d88a1dd0370748f2d198f48c.svg\" width=\"409\" height=\"23\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3e7\/2c3\/25d\/3e72c325d76df5c49e0da193e826c709.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}=[\\mathbf{y}^{\\phi}\\pmod m]\\mathsf{S}=[\\mathbf{y}^{\\phi+1 }\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1.\" alt=\"\\mathsf{B}=[\\mathbf{y}^{\\phi}\\pmod m]\\mathsf{S}=[\\mathbf{y}^{\\phi+1 }\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/637\/7f2\/5dc\/6377f25dce75053d4620c062b272dae4.svg\" width=\"406\" height=\"25\"\/><\/p>\n<p>Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}=\\mathsf{B}'\" alt=\"\\mathsf{A}=\\mathsf{B}'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/335\/3ba\/ebe\/3353baebee29413f01b6c24e7c082ecf.svg\" width=\"57\" height=\"19\"\/> with v.s.p. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V'\" alt=\"V'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46a\/558\/5eb\/46a5585eb5c2c5ae2b2d57b323fd2d82.svg\" width=\"22\" height=\"19\"\/> will not be able to reveal the session secret key, since this requires knowing <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbf{y}.\" alt=\"\\mathbf{y}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/448\/33c\/1d2\/44833c1d252993a8ea6881f3f51b86c0.svg\" width=\"17\" height=\"15\"\/> However, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V'\" alt=\"V'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eba\/606\/d5a\/eba606d5ae8503c48a8b0f21bc5a91b6.svg\" width=\"22\" height=\"19\"\/> knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{\\mathbf{y}}\" alt=\"\\acute{\\mathbf{y}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b4\/c2e\/c64\/5b4c2ec64d4e7b9d792a7bc3da22d04b.svg\" width=\"12\" height=\"20\"\/> and can compute <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}'=[\\acute{\\mathbf{y}}\\phi'\\pmod m]\\mathsf{S}=[\\acute{\\mathbf{y}}\\phi'\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{B}'=[\\acute{\\mathbf{y}}\\phi'\\pmod m]\\mathsf{S}=[\\acute{\\mathbf{y}}\\phi'\\upsilon s_\\ell\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d7\/975\/030\/4d797503027b2f3e8e0381ca4691f790.svg\" width=\"409\" height=\"23\"\/> but since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\acute{\\mathbf{y}}=\\mathbf{y}\" alt=\"\\acute{\\mathbf{y}}=\\mathbf{y}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bf\/38b\/cec\/2bf38bcec7d4b4512940acb7f62c49a7.svg\" width=\"49\" height=\"20\"\/> with v.s.p., then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}'=\\mathsf{B}'\" alt=\"\\mathsf{A}'=\\mathsf{B}'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/953\/75c\/fb8\/95375cfb86190793e127b0aa260e947a.svg\" width=\"63\" height=\"19\"\/> with v.s.p.<\/p>\n<h2>Protocol 2<\/h2>\n<p>Let&#8217;s suppose that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"{\\varphi_c=\\omega\\alpha^c\\pmod m}\" alt=\"{\\varphi_c=\\omega\\alpha^c\\pmod m}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/550\/39f\/084\/55039f084cae1b99c797de67138bb154.svg\" width=\"176\" height=\"22\"\/> is a ECDLP\/DLP solution subject to\u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_c\" alt=\"\\mathsf{P}_c\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f9f\/a67\/2c1\/f9fa672c10bb64a8d9af88a21ee5e5a7.svg\" width=\"20\" height=\"20\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{P}_c, \\mathsf{G}_1).\" alt=\"e_m(\\mathsf{P}_c, \\mathsf{G}_1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e2\/ec0\/e1d\/4e2ec0e1d0470531a65b6108b67de6a5.svg\" width=\"94\" height=\"22\"\/> Then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{S}}'=[\\varphi_c^{-1}\\acute{\\mathbf{y}}\\pmod m]\\widehat{\\mathsf{S}}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_{V'},\" alt=\"\\widehat{\\mathsf{S}}'=[\\varphi_c^{-1}\\acute{\\mathbf{y}}\\pmod m]\\widehat{\\mathsf{S}}=[\\upsilon s_\\ell \\pmod m]\\mathsf{P}_{V'},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/903\/7ec\/c54\/9037ecc5454454aa6d07e571fe83b834.svg\" width=\"400\" height=\"29\"\/> but in order to compute <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{T}}'=[\\phi'\\gamma\\omega^{-1} \\acute{\\mathbf{ y}}\\pmod m]\\widehat{\\mathsf{P}}_c=[\\phi']\\mathsf{P}_{V'},\" alt=\"\\widehat{\\mathsf{T}}'=[\\phi'\\gamma\\omega^{-1} \\acute{\\mathbf{ y}}\\pmod m]\\widehat{\\mathsf{P}}_c=[\\phi']\\mathsf{P}_{V'},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b33\/794\/85c\/b3379485cee728e0caa49afefe59d73f.svg\" width=\"332\" height=\"28\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi'=\\phi\" alt=\"\\phi'=\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/440\/d97\/b60\/440d97b60463ed31dffb1cfc6c4bddbf.svg\" width=\"54\" height=\"22\"\/> with v.s.p., it is necessary to know <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\gamma\" alt=\"\\gamma\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/15a\/b0e\/bfd\/15ab0ebfdb06ad6320b978f8c3f056c7.svg\" width=\"10\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\omega.\" alt=\"\\omega.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/889\/743\/ee5\/889743ee51c9d65ef6161e5a3464e12e.svg\" width=\"17\" height=\"12\"\/> As demonstrated above, the revelation of them requires to solve a specific <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b81\/db6\/89f\/b81db689fcb5694e2d0473822e27c9ba.svg\" width=\"32\" height=\"17\"\/>-complete problem under the condition that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u\" alt=\"\\varphi_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ac\/a42\/4ad\/9aca424ad5120e07e902a379339d4f7b.svg\" width=\"22\" height=\"16\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_u\" alt=\"s_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a0b\/49e\/545\/a0b49e545ef5626109f590f7962aaa62.svg\" width=\"19\" height=\"15\"\/> are known.<\/p>\n<p>In the light of the explanation given above, further considerations regarding impersonation do not make sense.<\/p>\n<h2>Amount of information transmitted<\/h2>\n<p>When a <a href=\"https:\/\/habr.com\/ru\/articles\/748354\/\" rel=\"noopener noreferrer nofollow\"><u>compact representation<\/u><\/a> is used, then, in order to deliver <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S},\" alt=\"\\mathsf{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2cf\/f33\/c0c\/2cff33c0cf914b51a307503bb2d79d42.svg\" width=\"16\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T},\" alt=\"\\mathsf{T},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13d\/11b\/3c4\/13d11b3c4463f9f8e7d22a0e3bb1f00c.svg\" width=\"18\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R},\" alt=\"\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/52a\/324\/73b\/52a32473bd80258145956926d74e14d0.svg\" width=\"18\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_a\" alt=\"g_a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bfd\/5d3\/082\/bfd5d3082360965654768728d7850200.svg\" width=\"18\" height=\"15\"\/> in <strong>Protocol 1<\/strong>, as well as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{S}},\" alt=\"\\widehat{\\mathsf{S}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/467\/d6f\/9f5\/467d6f9f538131d1220e9e91837430f7.svg\" width=\"16\" height=\"26\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\widehat{\\mathsf{T}},\" alt=\"\\widehat{\\mathsf{T}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/814\/0b2\/5bb\/8140b25bbc79b4ed97fefb0870cd307b.svg\" width=\"18\" height=\"25\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R},\" alt=\"\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a3\/5e1\/3fb\/7a35e13fbab02e1b9be770c73f506c30.svg\" width=\"18\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hat{g}_a\" alt=\"\\hat{g}_a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/918\/806\/e5b\/918806e5bcc1ebf9b565786993c85424.svg\" width=\"19\" height=\"21\"\/> in <strong>Protocol 2<\/strong>, one will need to transmit <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"3(\\lceil\\log_{2}{p}\\rceil+1)+ k\\lceil\\log_{2}{p}\\rceil+\\lambda\" alt=\"3(\\lceil\\log_{2}{p}\\rceil+1)+ k\\lceil\\log_{2}{p}\\rceil+\\lambda\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/744\/1be\/106\/7441be1064518bdc2fe59d8a6209b7cf.svg\" width=\"253\" height=\"22\"\/> bits, where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\lambda\" alt=\"\\lambda\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26b\/b12\/7d0\/26bb127d0ce2713f790918d44fa8f888.svg\" width=\"11\" height=\"17\"\/> is the bitlength of the binary representation of serial numbers of certificates <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_V,\\mathsf {P}_V, \\Im_{\\rm{T}}\\}\" alt=\"\\{D_V,\\mathsf {P}_V, \\Im_{\\rm{T}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ef3\/099\/481\/ef3099481eecd680eb3f7f7d254f524d.svg\" width=\"112\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\},\" alt=\"\\{D_c,\\mathsf{P}_c, \\widehat{\\Im}_{\\rm{T}}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b09\/e30\/071\/b09e30071ecb91d9e78c65d06a93ad63.svg\" width=\"108\" height=\"26\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba4\/623\/136\/ba4623136d6bf4efc62775066d1dd6b3.svg\" width=\"10\" height=\"17\"\/> is the embedding degree (<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_a, \\hat{g}_a\\in\\mathbb{G}_3\" alt=\"g_a, \\hat{g}_a\\in\\mathbb{G}_3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e5\/551\/b96\/6e5551b9600bd25b5b09de06e6dfd147.svg\" width=\"94\" height=\"21\"\/>). Explanations regarding the embedding degree are provided in <a href=\"https:\/\/mega.nz\/file\/MCARjYKA#rsylBNfuCUpRQ8ERy-7F6b2aTL3F8vs30IEYKuHy68o\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>.<\/p>\n<p>If some random subset <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S}\" alt=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/213\/471\/238\/2134712386092c0963d002adc6fec955.svg\" width=\"60\" height=\"22\"\/> is involved, then it is necessary to notify <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ace\/27c\/5ab\/ace27c5ab0b15fccd64d13ad93fe45c7.svg\" width=\"15\" height=\"17\"\/> about the enumerators included in this subset. To do this, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/530\/91f\/fe0\/53091ffe0278490f602f9c98ddd072af.svg\" width=\"14\" height=\"17\"\/> must additionally transmit <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"R(n)\" alt=\"R(n)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc2\/cf4\/6dc\/bc2cf46dc6d15a77f1c70c6470ee3600.svg\" width=\"41\" height=\"22\"\/>\u00a0 bits of information, where<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/002\/e28\/bdc\/002e28bdc4ec7a1d8a1f99ebb1f7fc39.png\" width=\"493\" height=\"88\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/002\/e28\/bdc\/002e28bdc4ec7a1d8a1f99ebb1f7fc39.png\"\/><\/figure>\n<p>When <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d60\/82f\/b96\/d6082fb96671e510c1da36d676f50678.svg\" width=\"12\" height=\"12\"\/> bits are transmitted, the numerators from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}_\\wp\" alt=\"\\mathcal{S}_\\wp\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/12e\/623\/fed\/12e623fed0e8fc64c151240c3ed0f95e.svg\" width=\"22\" height=\"22\"\/> correspond to the positions where the binary units are located.<\/p>\n<p>On the other hand, it is reasonable to estimate the amount of information required for the transmission of only protocol messages, since this subset is either fixed or changes slowly over time for most practical applications, although <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f9\/46b\/62b\/7f946b62b0164cf7351c48bacbb1a3ab.svg\" width=\"15\" height=\"17\"\/> must know which numerators are included in <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S},\" alt=\"\\mathcal{S}_\\wp\\subseteq\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/542\/575\/e76\/542575e76f848a2c13845ffeaba2e274.svg\" width=\"66\" height=\"22\"\/> and therefore somehow obtain the relevant information. Therefore, it is enough to transmit information about numerators once. When estimating, we can neglect the amount of information that needs to be transmitted to modify such a slowly changing subset.<\/p>\n<h2>Computational optimization<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}\" alt=\"\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c3\/73a\/a71\/5c373aa71c6695529bd4a7081dee36e6.svg\" width=\"12\" height=\"17\"\/> is fixed in a number of practical applications. For example, when some sets of public keys, used for verification, are assigned to individual structural divisions of a corporation or government agency. In this case, there is no need to report the numerators from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S}\" alt=\"\\mathcal{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ece\/050\/d37\/ece050d3795b5f2c725664004d01889f.svg\" width=\"12\" height=\"17\"\/> each time, since the set of necessary public keys is predefined.<\/p>\n<p>If you commit <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{S},\" alt=\"\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c71\/ccb\/1a7\/c71ccb1a7bb1dda1ce3bd756dbb6d81c.svg\" width=\"18\" height=\"20\"\/> then you can proactively confirm the authenticity, integrity and relevance of public keys <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}_{n+1-j},\" alt=\"\\mathsf{P}_{n+1-j},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/325\/9b8\/eb0\/3259b8eb0d407b7bb7c30accd1606904.svg\" width=\"61\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"j\\in\\mathcal{S},\" alt=\"j\\in\\mathcal{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a0d\/bb4\/bd0\/a0dbb4bd0da873a4fd7b117bc2054d6a.svg\" width=\"49\" height=\"20\"\/> using corresponding certificates. <\/p>\n<p>Then it&#8217;s necessary to compute and publish the point <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{M}=\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j}.\" alt=\"\\mathsf{M}=\\sum_{j\\in \\mathcal{S}} \\mathsf{P}_{n+1-j}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b65\/5d6\/872\/b655d687258e5d82d8a7884dd80174b2.svg\" width=\"135\" height=\"48\"\/> Then the <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\" alt=\"\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/202\/43e\/da4\/20243eda4394e3b1a24998e5785c43fd.svg\" width=\"8\" height=\"17\"\/>-th prover computes the point <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{K}_\\ell=\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j}\" alt=\"\\mathsf{K}_\\ell=\\sum_{j\\in\\widetilde{ \\mathcal{S}}} \\mathsf{P}_{n+1-j}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/553\/097\/08f\/55309708f4bd5f377a22afdb3f0b99de.svg\" width=\"134\" height=\"51\"\/> in advance and stores it in local long-term secret memory. Assuming that <strong>Protocol 1<\/strong> is initiated, then in the case of the <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\ell\" alt=\"\\ell\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/002\/ab3\/c87\/002ab3c87d8b10cd61e219c99924f3fa.svg\" width=\"8\" height=\"17\"\/>-th prover <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/552\/d90\/11b\/552d9011bd7dc27538d709f33bdddc78.svg\" width=\"14\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_\\ell={e_m([\\upsilon s_\\ell\\pmod m] \\mathsf{T}, \\mathsf{G}_1+ \\mathsf{K}_\\ell)}\" alt=\"g_\\ell={e_m([\\upsilon s_\\ell\\pmod m] \\mathsf{T}, \\mathsf{G}_1+ \\mathsf{K}_\\ell)}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f1\/c0e\/644\/7f1c0e64408a92a5041fd93bc8ce63c6.svg\" width=\"303\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24d\/d88\/8d2\/24dd888d26a9f66378b47ce83270d005.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_b={e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{ G}_1+\\mathsf{M})}.\" alt=\"g_b={e_m([\\mathbf{y}^\\phi\\pmod m]\\mathsf{S}, \\mathsf{ G}_1+\\mathsf{M})}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/792\/39a\/b1d\/79239ab1d443c14ffbfdb834ec78c5ac.svg\" width=\"297\" height=\"25\"\/><\/p>\n<p>The optimization is relevant for both <strong>Protocol 1<\/strong> and <strong>Protocol 2<\/strong>.<\/p>\n<p>If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/661\/19f\/d93\/66119fd932c98ac55de317034d53e671.svg\" width=\"15\" height=\"17\"\/> always belongs to a group of registered participants and <strong>Protocol 2<\/strong> is initiated, then an optimization is possible that relies on the following rationale.<\/p>\n<p>The embedding degree <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"k,\" alt=\"k,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b7\/7de\/3f3\/0b77de3f348a5dc7c6bee0fcb8c4a36e.svg\" width=\"15\" height=\"20\"\/> as well as the field characteristic <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p,\" alt=\"p,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cbf\/6d1\/00b\/cbf6d100b4e90237d457f1f4145c3d17.svg\" width=\"16\" height=\"15\"\/> determine the complexity of the DLP in <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{G}_3.\" alt=\"\\mathbb{G}_3.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/450\/4c1\/176\/4504c117642cc5de17a11496ad716fd0.svg\" width=\"29\" height=\"20\"\/> For a fixed <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"p,\" alt=\"p,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a17\/2db\/a11\/a172dba11c15478149d2ea1f9ce21801.svg\" width=\"16\" height=\"15\"\/> the larger <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"k,\" alt=\"k,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03f\/085\/62c\/03f08562c1e81d65eb9927e5b04a9422.svg\" width=\"15\" height=\"20\"\/> the higher the complexity of individual pairing, as well as various arithmetic operations in <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{G}_3,\" alt=\"\\mathbb{G}_3,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f06\/173\/c60\/f06173c6085d40f777e0a96225cf0c69.svg\" width=\"29\" height=\"20\"\/> including discrete exponentiation and multiplicative inversion. Since for <strong>Protocol 2<\/strong> the subexponential complexity of finding a DLP solution is not critical, it is reasonable to reduce the complexity of arithmetic operations, as well as reduce the memory resource by using small values of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"k.\" alt=\"k.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bfa\/288\/0ae\/bfa2880ae46a4139bf15bab31db62578.svg\" width=\"15\" height=\"17\"\/><\/p>\n<h2>Conclusions<\/h2>\n<p>Regarding the key security, <strong>Protocol 1<\/strong> and <strong>Protocol 2<\/strong> are presumably consistent with the basic imperative of <em>post-quantum cryptography<\/em>, where the rationale for security is to prove that an attack on a cryptosystem consists of finding a solution to some problem that is hypothetically intractable on a quantum computer. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e98\/302\/c59\/e98302c59b41ef6ba2f1fa7696ec72a7.svg\" width=\"32\" height=\"17\"\/>-complete problems under the condition <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\\neq NP\" alt=\"P\\neq NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/617\/2bd\/683\/6172bd683e53be65ff62133e25e8d0b5.svg\" width=\"72\" height=\"21\"\/> fully comply with this statement.<\/p>\n<p>Since the ECDLP\/DLP solution for an arbitrary public key from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathcal{P}\" alt=\"\\mathcal{P}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ee\/34c\/396\/6ee34c396e402e1242921d928b4b63a1.svg\" width=\"14\" height=\"18\"\/> does not allow revealing the corresponding private key due to special masking techniques, we assumed that in addition to the solution <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\varphi_u,\" alt=\"\\varphi_u,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d26\/050\/a79\/d26050a79ff6a8d3defdf6ef20583e33.svg\" width=\"28\" height=\"16\"\/> the private key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"s_u\" alt=\"s_u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/607\/0f4\/894\/6070f4894cd002bf44e1424dd9326fac.svg\" width=\"19\" height=\"15\"\/> is also known. It is demonstrated that even with such assumptions, it is necessary to find a solution to a specific <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0a5\/da7\/213\/0a5da7213689478d29813f2b3ccc6b77.svg\" width=\"32\" height=\"17\"\/>-complete problem to reveal all other private keys.<\/p>\n<p>We emphasize that the choice of numbers <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u=2^{2^w},\" alt=\"u=2^{2^w},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/221\/6c0\/5d0\/2216c05d0842a77c61ba6eb522d329de.svg\" width=\"69\" height=\"24\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"u\\in[2,n],\" alt=\"u\\in[2,n],\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f7\/9c9\/761\/6f79c9761e3e125f7eb62e6c4cc14c00.svg\" width=\"80\" height=\"22\"\/> is limited. There are few such numbers, for example, if we put <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n=2^{16},\" alt=\"n=2^{16},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/37f\/6ac\/5ec\/37f6ac5ec4fb43398930c9f83077f4e9.svg\" width=\"68\" height=\"24\"\/> then the numbers from the set <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{2, 2^2, 2^4, 2^8, 2^{16}\\}\" alt=\"\\{2, 2^2, 2^4, 2^8, 2^{16}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b7\/a69\/5f1\/6b7a695f1cadda96969349d5de9909c8.svg\" width=\"144\" height=\"25\"\/> are available. Expansion of this set is unlikely, since groups with the number of participants <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"n=2^{32}\" alt=\"n=2^{32}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/249\/153\/316\/2491533161caed8c6c1ee0b34b344ebf.svg\" width=\"62\" height=\"21\"\/> and more are rarely encountered in practice.<\/p>\n<p>Consequently, the adversary&#8217;s options are also limited.<\/p>\n<p>It should be noted that <strong>Protocol 1<\/strong> allows impersonation with the known ECDLP\/DLP solution. This is because the verifier&#8217;s private and public keys do not have additional masking, unlike the keys used in Protocol 2.<\/p>\n<p>The anonymous group identification protocol described and analyzed in this article effectively distinguishes itself by the security level from the functionally similar protocol in this article. This distinction arises because the security of the latter is solely determined by the complexity of finding an ECDLP\/DLP solution.<\/p>\n<h2>Final findings<\/h2>\n<p>IDS-compatible anonymous identification protocols for groups have been designed and studied. It is demonstrated that the key security is determined by the complexity of finding a solution to a specific <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c55\/5d7\/354\/c555d7354e9a60478d81af440991aba9.svg\" width=\"32\" height=\"17\"\/>-complete problem.<\/p>\n<p>The text of the article in pdf format can be <a href=\"https:\/\/mega.nz\/file\/VWwzSYrT#mS8ukJwOnbGTMnq4JVWAyTr_kdy2rLhKymI5sGJCk_w\" rel=\"noopener noreferrer nofollow\">downloaded here<\/a>.<\/p>\n<h2>References<\/h2>\n<p>[RST&#8217;01] Rivest, Ronald L., Shamir, A., Tauman, Y. &#171;How to leak a secret: Theory and applications of ring signatures.&#187; In <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{Advances in Cryptology \u2014 ASIACRYPT'01},\" alt=\"\\textit{Advances in Cryptology \u2014 ASIACRYPT'01},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e6\/5c2\/084\/4e65c208487dbcbd623631f76a059923.svg\" width=\"373\" height=\"20\"\/> LNCS 3895, (2001) 164-186.<\/p>\n<p>[C&#8217;06] Cohen, H., Frey, G., Avanzi, R., Doche, C., Lange, T., Nguyen, K., Vercauteren, F. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{Handbook of Elliptic and Hyperelliptic Curve Cryptography},\" alt=\"\\textit{Handbook of Elliptic and Hyperelliptic Curve Cryptography},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7f\/569\/b3a\/c7f569b3a2d5d99491942a8fbe88a221.svg\" width=\"493\" height=\"20\"\/> Chapman and Hall\/CRC, 2006.<\/p>\n<p>[AKS&#8217;04] Agrawal, M., Kayal, N., Saxena, N. &#171;PRIMES is in P.&#187; <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{Annals of Mathematics},\" alt=\"\\textit{Annals of Mathematics},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/324\/a7d\/041\/324a7d041bdc1054307a1787ff5d40bf.svg\" width=\"196\" height=\"20\"\/> v.160, (2004) 781-793.<\/p>\n<p>[I&#8217;11] \u0418\u0448\u043c\u0443\u0445\u0430\u043c\u0435\u0442\u043e\u0432 \u0428. \u0422. \u041c\u0435\u0442\u043e\u0434\u044b \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b: \u0443\u0447\u0435\u0431\u043d\u043e\u0435 \u043f\u043e\u0441\u043e\u0431\u0438\u0435. \u2014 \u041a\u0430\u0437\u0430\u043d\u044c: \u041a\u0430\u0437\u0430\u043d. \u0443\u043d-\u0442, 2011. 200 \u0441.<\/p>\n<p>[GJ&#8217;79] Garey, M. R.\u00a0 and\u00a0 Johnson, D. S. A Guide to the Theory of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"NP\" alt=\"NP\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8f\/754\/28d\/f8f75428d565189d2d873304fdec0c59.svg\" width=\"32\" height=\"17\"\/>-Completeness. W. H. Freeman&amp;Co., New York, NY, 1979.<\/p>\n<p>[G&#8217;96] Grover, L. &#171;A fast quantum mechanical algorithm for database search.&#187; Proceedings of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{28th Annual ACM Symposium on the Theory of Computing (STOC)},\" alt=\"\\textit{28th Annual ACM Symposium on the Theory of Computing (STOC)},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/138\/3d9\/816\/1383d981648816b56a09aa419439b8a5.svg\" width=\"569\" height=\"22\"\/> (1996) 212-219. <a href=\"https:\/\/arxiv.org\/abs\/quant-ph\/9605043\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/arxiv.org\/abs\/quant-ph\/9605043<\/u><\/a>.<\/p>\n<p>[S&#8217;97] Shor, Peter W. &#171;Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer.&#187; <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{SIAM Journal on Computing},\" alt=\"\\textit{SIAM Journal on Computing},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a97\/938\/d08\/a97938d0828cdda3ccaf627c1f52f13a.svg\" width=\"246\" height=\"20\"\/> v.26, 5, (1997) 1484-1509.<\/p>\n<p>[BGW&#8217;05] Boneh, D., Gentry, C. and Waters, B.\u00a0 &#171;Collusion Resistant Broadcast Encryption With Short Ciphertexts and Private Keys.&#187; In <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{Proceedings of Crypto 2005},\" alt=\"\\textit{Proceedings of Crypto 2005},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/486\/b8f\/734\/486b8f7349732078aa9214f72a9c4ad6.svg\" width=\"234\" height=\"20\"\/> LNCS 3621, (2005) 258-275.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/764470\/\"> https:\/\/habr.com\/ru\/articles\/764470\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>The identification protocol based on the pairing function, resistant to impersonation and compatible with the instant digital signature (IDS) mode, was studied in <a href=\"https:\/\/habr.com\/ru\/articles\/754688\/\" rel=\"noopener noreferrer nofollow\"><u>this article<\/u><\/a>. This protocol uses prover&#8217;s and verifier&#8217;s public keys. As a result, there is no anonymity, since certificates including personal data of their owners are issued for the mentioned keys. This article contains a description and analysis of new anonymous identification protocols for groups.<\/p>\n<p>This publication consists of sections where we describe anonymous group identification protocols for two different scenarios, analyze the key security and resistance to impersonation, estimate the amount of information transmitted, and evaluate the optimization of computations and memory resources. At the end of this text, summary and conclusion are specified and formulated.<\/p>\n<p>This publication consists of sections where we describe anonymous group identification protocols for two different scenarios, analyze the key security and resistance to impersonation, estimate the amount of information transmitted, and evaluate the optimization of computations and memory resources. At the end of this text, summary and conclusion are specified and formulated.<\/p>\n<p>The term &#8216;vanishingly small probability&#8217; (abbreviated as v.s.p.) and the boolean variable as well as public key certificates functions, were all explained in our <a href=\"https:\/\/habr.com\/ru\/users\/ENCRY\/publications\/articles\/\" rel=\"noopener noreferrer nofollow\"><u>previous article<\/u><\/a>.<\/p>\n<p>The following practical problem is studied in the fundamental work [RST&#8217;01]. Some party  for example, a member of the cabinet of ministers (CM), intends to publish incriminating information about the actions of the prime minister. For this purpose,  contacts, for example,  a journalist from an independent media. In this case, on the one hand, it is necessary to guarantee the anonymity of the source. On the other hand, it&#8217;s essential to ensure the reliability of the information provided. From the point of view of  the information provided by a member of the CM is considered reliable.<\/p>\n<p>Let&#8217;s take a look at possible options.<\/p>\n<ol>\n<li>\n<p>  cannot transmit a message signed with through a digital signature (DS) scheme, since the verification will result in de-anonymization, because\u00a0  personal data is included in the public key certificate. Although this method will certainly convince  that the information comes from a member of the CM.<\/p>\n<\/li>\n<li>\n<p>If  uses anonymizing services, then all identifiers of the sender will be removed from the transmitted message. Therefore,  will not be able to verify that the information comes from a member of the CM and won&#8217;t consider it reliable.<\/p>\n<\/li>\n<\/ol>\n<p>In [RST&#8217;01] a solution has been proposed. Each member of the CM generates a DS using his personal private key, but this DS can only be verified using the personal public keys of all members of the CM, including the witness himself. As a result,  is convinced and can also convince a third party that the information comes from the CM, but at the same time  remains unknown.<\/p>\n<p>We propose a solution to the problem formulated above through an anonymous identification protocol for groups. The advantage of our solution is that in addition to anonymous identification,  can transmit information confidentially using a secure data transfer tunnel. The tunnel (virtual) is accessible by construction, since  and  are able to independently generate a shared session secret key upon successful identification. Confidentiality is guaranteed by using a symmetric cryptographic scheme.<\/p>\n<p>The anonymous group identification protocol also makes it possible to convince a third party that the information received comes from a member of the CM. This follows from the fact that all public keys involved in verifying the evidence belong to members of the CM, which is easily verified using personal data from the certificates of these keys. Anonymity is based on a simple principle, which can be formulated as follows: \u201cit is reliably known that one is from the group, but it is not known who exactly.\u201d<\/p>\n<p>The use of an anonymous group identification protocol is logically justified in the context of solving a wide range of practical problems for which compatibility with the IDS mode is essential. Some scenarios are <a href=\"https:\/\/habr.com\/ru\/articles\/705266\/\" rel=\"noopener noreferrer nofollow\"><u>described here<\/u><\/a>.<\/p>\n<h3>Anonymous identification protocols for groups<\/h3>\n<p>The parameters used below, such as , , , , ,  are explained in <a href=\"https:\/\/mega.nz\/file\/MCARjYKA#rsylBNfuCUpRQ8ERy-7F6b2aTL3F8vs30IEYKuHy68o\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>.<\/p>\n<p>For the sake of simplicity, we omit details related to the verification of criteria needed for inclusion in the group, as well as the subsequent registration of those participants who meet them. We will proceed from the assumption that such a group has been successfully created.<\/p>\n<p>For  participants, represented by a set of numerators\u00a0  the trusted party  generates a set of long-term public keys  a set of personal private keys of participants  as well as a group public key <\/p>\n<p><strong>Setup (Input: . Output: , , ).<\/strong><\/p>\n<ol>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<p> if  then it chooses another <\/p>\n<\/li>\n<li>\n<p>  if  then it goes to 3.<\/p>\n<\/li>\n<li>\n<p> if  then it chooses another <\/p>\n<\/li>\n<li>\n<p> if  then it goes to 5.<\/p>\n<\/li>\n<li>\n<p>  if  then it goes to 5.<\/p>\n<\/li>\n<li>\n<\/li>\n<\/ol>\n<p>The private key  is delivered to the -th participant in a private way, for example, using <strong><em>Protocol 3<\/em><\/strong> from <a href=\"https:\/\/habr.com\/ru\/articles\/748354\/\" rel=\"noopener noreferrer nofollow\"><u>this article<\/u><\/a>. A separate certificate is issued indicating the owner\u2019s personal data for each public key from  In addition, a single certificate is issued for  which establishes the connection between the components of this set with keys from <\/p>\n<p>The setup <u>is performed once<\/u> and ends with the removal of     from the local long-term secret memory of party  In total,  certificates are issued and maintained.<\/p>\n<h3>Protocol 1<\/h3>\n<p>Let&#8217;s consider the anonymous identification protocol for the case where  does not belong to the group of registered participants and  differs from the public keys from  Let&#8217;s suppose that  owns a key pair  where  The certificate  is issued for   has access to  and knows <\/p>\n<p>Let an th participant act as   <\/p>\n<p><strong>Protocol messages.  <\/strong><\/p>\n<ol>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<\/ol>\n<p><strong>Actions of the parties.<\/strong>  <\/p>\n<p> proves to  that it knows the private key  such that  and  During the proof,   and  are not revealed. The following steps are performed:<\/p>\n<ol>\n<li>\n<p> reads the current certificate  and checks the DS of the trusted party  If  then the session ends. If  then it chooses  (<em>commitment<\/em>), computes  (<em>witness<\/em>), checks the condition  If  then  selects a new  and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p> reads the current certificate  and checks the DS of the trusted party  If  then the session ends. If  then  selects  and computes  (<em>challenge<\/em>). If  then  selects a new  and re-performs the necessary computations and checks.  <\/p>\n<\/li>\n<li>\n<p>  checks the integrity, authenticity and relevance of public keys    using the appropriate certificates. If relevance is not confirmed or  then the current session ends.  checks the condition  If it&#8217;s true, then  computes <em>response<\/em> for  as  where <\/p>\n<\/p>\n<p>otherwise the session ends.<\/p>\n<\/li>\n<li>\n<p> verifies the integrity, authenticity and relevance of public keys   using the appropriate certificates. If the relevance is not confirmed or  then the current session ends.  checks the condition  If the condition is not met, the session ends. If it&#8217;s met, then  computes:<\/p>\n<\/p>\n<\/li>\n<\/ol>\n<p>Then  checks  If equal, then the proof is accepted, and rejected otherwise.<\/p>\n<p>If the identification stage is successfully completed, the parties independently generate a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p> computes <\/p>\n<\/li>\n<li>\n<p> computes <\/p>\n<\/li>\n<\/ol>\n<h2>Protocol 2<\/h2>\n<p>Let&#8217;s now consider a protocol where  belongs to a group of registered participants. Then  owns a key pair  where  and   The certificate  is issued for <\/p>\n<p><strong><em>Protocol messages.<\/em><\/strong><\/p>\n<ol>\n<li>\n<\/li>\n<li>\n<\/li>\n<li>\n<\/li>\n<\/ol>\n<p><strong><em>Actions of the parties.<\/em><\/strong><\/p>\n<p> proves to  that it knows the private key  such that  and  During the proof,   and  are not revealed. The following steps are performed:<\/p>\n<ol>\n<li>\n<p> reads the current certificate  and checks the DS of the trusted party  If  then the session ends. If  then  chooses  (<em>commitment<\/em>), computes  (<em>witness<\/em>), checks the condition  If  then  choses another  and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p> reads the current certificate  and checks the DS of the trusted party  If  then the session ends. If  then  computes  chooses  and then computes  (<em>challenge<\/em>). If  then  chooses another  and re-performs the necessary computations and checks.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>\n<p> checks the integrity, authenticity and relevance of public keys    using the appropriate certificates. If relevance is not confirmed or  then the current session ends.  checks the condition  If the condition is met, then  computes <em>response<\/em> for  as  where<\/p>\n<\/li>\n<\/ol>\n<p>otherwise the session ends.<\/p>\n<ol start=\"4\">\n<li>\n<p> verifies the integrity, authenticity and relevance of public keys   using the appropriate certificates. If the relevance is not confirmed or  then the current session ends.  checks the condition  If the condition is not met, the session ends. If it is met, then  computes<\/p>\n<\/li>\n<\/ol>\n<p>Then  checks  If equal, then the proof is accepted, and rejected otherwise.<\/p>\n<p>If the identification stage is successfully completed, the parties independently generate a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p> computes <\/p>\n<\/li>\n<li>\n<p> computes <\/p>\n<\/li>\n<\/ol>\n<h2>Key security<\/h2>\n<p>The idea is that the public key  is masked using  while the private key  is masked using  where  and  by construction. This means that the complexity of revealing all  with a known ECDLP\/DLP solution for the public key from  as well as a known private key from  is not less than the complexity of finding a ECDLP\/DLP solution.<\/p>\n<p>Let&#8217;s consider a particular case. Let us assume that  and  are known, where  is the ECDLP\/DLP solution subject to  or  Then<\/p>\n<p>   and   Consequently, if  and  are known, then it is enough to find  to reveal all  <\/p>\n<p>Note that the adversary has additional capabilities. Let  and  be known such that    The adversary&#8217;s motivation is that with known  and 2&#8243; alt=&#187;u>2&#8243; src=&#187;https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c75\/ded\/48f\/c75ded48f90a63f07c613de0bd3bc1e0.svg&#187; width=&#187;46&#8243; height=&#187;16&#8243;\/> (the square root is calculated once if ), it is possible to reveal  using the iterative method of taking a square root using the Tonelli-Shanks algorithm of asymptotic complexity  [C&#8217;06] (section 11.1.5). <\/p>\n<p>For example, with known   and  In general, it is not known how to take the root of an arbitrary degree<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-356291","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/356291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=356291"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/356291\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=356291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=356291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=356291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}