{"id":381509,"date":"2024-06-29T03:42:32","date_gmt":"2024-06-29T03:42:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=381509"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T03:42:32","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=381509","title":{"rendered":"<span>On Schnorr identification protocol compatibility with instant digital signature mode<\/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>This post describes a modification of the Schnorr identification protocol which is compatible with the instant digital signature mode.<\/p>\n<p><strong>Introduction<\/strong><\/p>\n<p>The<a href=\"https:\/\/habr.com\/ru\/articles\/733124\/\" rel=\"noopener noreferrer nofollow\"> <u>article<\/u><\/a> describes the interactive Schnorr identification protocol (hereinafter referred to as the Schnorr protocol) and formulates the problem of compatibility of this protocol with the instant digital signature (IDS) mode. This post shows how to modify the Schnorr protocol to provide such compatibility.<\/p>\n<p><strong>IDS-compatible Schnorr protocol<\/strong><\/p>\n<p>Recall that some information about the arithmetic of elliptic curve points, as well as an explanation of ECDLP and DLP, was explained by our<a href=\"https:\/\/habr.com\/ru\/articles\/572994\/\" rel=\"noopener noreferrer nofollow\"> <u>previous publication<\/u><\/a>.<\/p>\n<p>For the sake of simplicity, we will leave everything that concerns the Schnorr protocol unchanged, including the key pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathbf{x},\\mathsf{R}=[-\\mathbf{x}]\\mathsf{G}_1\\}\" alt=\"\\{\\mathbf{x},\\mathsf{R}=[-\\mathbf{x}]\\mathsf{G}_1\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97e\/daa\/790\/97edaa7901f0fd586767fc892f9eb725.svg\" width=\"137\" height=\"22\"\/> and the certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}.\" alt=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/faa\/945\/b43\/faa945b43498592cb5f42257c40c9f6c.svg\" width=\"102\" height=\"22\"\/><\/p>\n<p>If we interpret the <a href=\"https:\/\/habr.com\/ru\/articles\/733124\/\" rel=\"noopener noreferrer nofollow\"><u>necessary condition<\/u><\/a>, then IDS-compatibility is possible when <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/482\/9df\/4f6\/4829df4f633f1b6bc61777c845de783f.svg\" width=\"14\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a67\/198\/497\/a67198497e0e6ab44519b4f40c7cd585.svg\" width=\"15\" height=\"17\"\/> are able to compute some common secret component. Such a component can be expressed as a shared session secret key. We will show how to do this using the example of the Schnorr protocol. Let&#8217;s denote the cryptographic hash function as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hslash(\\cdot).\" alt=\"\\hslash(\\cdot).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c0f\/5b6\/2e4\/c0f5b62e4b7e33dc4393e35b02514c12.svg\" width=\"37\" height=\"22\"\/><\/p>\n<p>Let&#8217;s make some changes to the protocol. Let&#8217;s use the following trick: we&#8217;ll &#171;hide&#187; the ephemeris <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/120\/28f\/0cc\/12028f0cc1af9e8ff29e729d3f0664e4.svg\" width=\"11\" height=\"20\"\/> at a point on the curve. This causes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit {response}\" alt=\"\\textit {response}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b0d\/a0e\/665\/b0da0e665be062ba5969eb04add7befb.svg\" width=\"72\" height=\"15\"\/> also turn into a point. As a result, we get the following protocol.<\/p>\n<p><em>Protocol messages.<\/em><\/p>\n<p>1. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow V : \\mathsf{S}=[\\upsilon]\\mathsf{G}_1\" alt=\"P \\longrightarrow V : \\mathsf{S}=[\\upsilon]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f5b\/87d\/183\/f5b87d183a050f8171864ee309cd8b4f.svg\" width=\"167\" height=\"22\"\/><\/p>\n<p>2. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longleftarrow V :\u00a0 \\mathsf{T}=[\\phi]\\mathsf{G}_1\" alt=\"P \\longleftarrow V :\u00a0 \\mathsf{T}=[\\phi]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7e\/619\/671\/e7e6196715f9fcddb49e1820ad7f4133.svg\" width=\"170\" height=\"22\"\/><\/p>\n<p>3. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P \\longrightarrow\u00a0 V\u00a0 : \\mathsf{N}=[\\mathbf{x}]\\mathsf{T}+\\mathsf{S}\" alt=\"P \\longrightarrow\u00a0 V\u00a0 : \\mathsf{N}=[\\mathbf{x}]\\mathsf{T}+\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/361\/712\/420\/361712420cfaa5012ed4284f56b8b4b9.svg\" width=\"197\" height=\"22\"\/><\/p>\n<p><em>The actions of the parties.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ee6\/ab6\/47f\/ee6ab647fd02d35fad79e94b95680fa7.svg\" width=\"14\" height=\"17\"\/> demonstrates to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b1\/d87\/b74\/0b1d87b7425530e72f8de4ff0ccec86e.svg\" width=\"15\" height=\"17\"\/> that he posesses (knows) <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbf{x}.\" alt=\"\\mathbf{x}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df1\/7ee\/59e\/df17ee59eb7f8928bedcbbd7a84819d8.svg\" width=\"17\" height=\"12\"\/> In order to achieve this, the subsequent actions are executed:<\/p>\n<p>1. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc2\/dae\/d51\/cc2daed5192e7d215e8fbf65ce91c701.svg\" width=\"14\" height=\"17\"\/> selects <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\\in_R\\!(0,m-1] (\\textit {commitment}),\" alt=\"\\upsilon\\in_R\\!(0,m-1] (\\textit {commitment}),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc5\/b95\/f92\/bc5b95f920a87bd395a859d9932ac97b.svg\" width=\"249\" height=\"22\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}=[\\upsilon]\\mathsf{G}_1 (\\textit {witness}),\" alt=\"\\mathsf{S}=[\\upsilon]\\mathsf{G}_1 (\\textit {witness}),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/442\/545\/725\/442545725849968b5eee3474c2a4931b.svg\" width=\"160\" height=\"22\"\/> verifies 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\/2aa\/863\/c93\/2aa863c9391684faee1a5e8fbbd5ddb8.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\/0f4\/ef2\/2f6\/0f4ef22f6aa8f108cd34222f40813346.svg\" width=\"56\" height=\"17\"\/> then it chooses a new <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e57\/5b3\/510\/e575b3510b8e4db597e97cf68a8f3102.svg\" width=\"10\" height=\"12\"\/> and repeats all the necessary computations and checks;<\/p>\n<p>2. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1a\/7d3\/fc0\/b1a7d3fc0ea1f3022a1423e982579b1d.svg\" width=\"15\" height=\"17\"\/> reads an actual certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" alt=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/462\/d57\/c18\/462d57c1870d6375219bb68e88a4cc11.svg\" width=\"97\" height=\"22\"\/> and checks the DS <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{B}\\Leftarrow{\\rm{Verify}}( \\hslash(\\mathsf{R}||D_{\\mathsf{R}}), \\Im_{\\mathsf{R}}, \\rm{P}_T),\" alt=\"\\mathfrak{B}\\Leftarrow{\\rm{Verify}}( \\hslash(\\mathsf{R}||D_{\\mathsf{R}}), \\Im_{\\mathsf{R}}, \\rm{P}_T),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d31\/429\/330\/d31429330c452163323576af12ca433e.svg\" width=\"260\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{P}_T\" alt=\"\\rm{P}_T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/88a\/238\/17e\/88a23817e60cdafea7a7a36965ae132e.svg\" width=\"25\" height=\"19\"\/> is the trusted party&#8217;s public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T.\" alt=\"T.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80d\/80b\/663\/80d80b663c1df5e34be53e28e758fa2c.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\/54e\/acc\/9ed\/54eacc9ed09e23fab0713854ef420d3c.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\/9d0\/2ea\/1d7\/9d02ea1d7bcc8bb2ae53a6acc642f968.svg\" width=\"85\" height=\"17\"\/> then it 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\/913\/411\/f41\/913411f416caf4b1b4c529c6481e9669.svg\" width=\"125\" height=\"22\"\/> and computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}=[\\phi]\\mathsf{G}_1\" alt=\"\\mathsf{T}=[\\phi]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/776\/15f\/c97\/77615fc97bdc54ce562d6397cd3515b7.svg\" width=\"83\" height=\"22\"\/> (<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{challenge}\" alt=\"\\textit{challenge}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c21\/077\/4ce\/c210774ce0d74cfc4774c293d1aa5cc1.svg\" width=\"76\" height=\"20\"\/>). 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\/cda\/007\/c89\/cda007c8980ab0aac5415e16e2efdd9c.svg\" width=\"58\" height=\"17\"\/> then it selects a new <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e19\/819\/dd8\/e19819dd8745ab42b8d9ceac3f11b8eb.svg\" width=\"11\" height=\"20\"\/> and repeats all the necessary computations and checks;<\/p>\n<p>3. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16c\/eee\/e42\/16ceeee42ac4fbe8efc7af7b771abd9f.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\/84f\/c02\/039\/84fc02039cbff52df63cc03c95c08579.svg\" width=\"63\" height=\"37\"\/> if it is true, then it computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}=[\\mathbf{x}]\\mathsf{T}+\\mathsf{S}=[\\mathbf{x}\\phi+\\upsilon \\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{N}=[\\mathbf{x}]\\mathsf{T}+\\mathsf{S}=[\\mathbf{x}\\phi+\\upsilon \\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d37\/1fa\/ee4\/d371faee4284ccd9fdff7d6ea15780eb.svg\" width=\"322\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\textit{response}\" alt=\"(\\textit{response}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c4\/d95\/05e\/5c4d9505e127b430cbf51d0f21a2e727.svg\" width=\"80\" height=\"22\"\/>), otherwise the session ends;<\/p>\n<p>4. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e13\/edf\/433\/e13edf43357fb9feda01b7eaf9754457.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=\\mathsf{N}+[\\phi]\\mathsf{R}.\" alt=\"\\mathsf{Q}=\\mathsf{N}+[\\phi]\\mathsf{R}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d85\/dac\/1e0\/d85dac1e09dc958befc1d162df1d52fd.svg\" width=\"117\" height=\"22\"\/> Then it checks <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}}\\stackrel{?}{=}x_{\\mathsf{S}}.\" alt=\"x_{\\mathsf{Q}}\\stackrel{?}{=}x_{\\mathsf{S}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3be\/dbc\/b8a\/3bedbcb8a5c8d0acfd20fcded4d220df.svg\" width=\"75\" height=\"30\"\/> If equal then the proof is accepted, and rejected otherwise.<\/p>\n<p>So, suppose that the identification step was successful and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/081\/30a\/0fd\/08130a0fdc409a14629d9a0ea1636884.svg\" width=\"15\" height=\"17\"\/> accepted the proof provided by <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P.\" alt=\"P.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/426\/bdf\/d00\/426bdfd00819b7f73312eee22041f0dd.svg\" width=\"20\" height=\"17\"\/><\/p>\n<p>At this point, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c7\/a94\/62e\/1c7a9462eff922e4890b22be9d85c33b.svg\" width=\"14\" height=\"17\"\/> has the following set of data: <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a13\/d8c\/2cd\/a13d8c2cd2860f51c71aed09d7bfa2cd.svg\" width=\"10\" height=\"12\"\/> (<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{commitment}\" alt=\"\\textit{commitment}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b3\/1d5\/13d\/7b31d513dee32eea9e44e1068004c075.svg\" width=\"105\" height=\"16\"\/> by construction), <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}\" alt=\"\\mathsf{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a95\/3c0\/67a\/a953c067a6efb1bbfdea457a9d4f1580.svg\" width=\"13\" height=\"17\"\/> (received from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/887\/441\/65e\/88744165ee6d570771c6bf7d4de59284.svg\" width=\"15\" height=\"17\"\/> as a <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{challenge}\" alt=\"\\textit{challenge}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eab\/be9\/0dc\/eabbe90dc690b9f8b51b8d54981134de.svg\" width=\"76\" height=\"20\"\/>). <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ebd\/5f0\/945\/ebd5f0945bb51de4622150e54d135126.svg\" width=\"15\" height=\"17\"\/> knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}\" alt=\"\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/af2\/965\/6aa\/af29656aaa99533b6928bd3b8d47d6ab.svg\" width=\"11\" height=\"17\"\/> (received from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e28\/92b\/c9d\/e2892bc9d85119bef5377879dd2a9a05.svg\" width=\"14\" height=\"17\"\/> as a <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{witness}\" alt=\"\\textit{witness}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a43\/77e\/e79\/a4377ee79ea20732434b9293be36a96a.svg\" width=\"61\" height=\"16\"\/>), <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce0\/33a\/466\/ce033a4664ec85ad7b5b216c965f9d8f.svg\" width=\"11\" height=\"20\"\/> (by construction), <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}\" alt=\"\\mathsf{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b52\/837\/540\/b5283754078e313e4614b0018c786c3f.svg\" width=\"14\" height=\"17\"\/> (received from <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55f\/aef\/652\/55faef65270ed8294fbd68b7b271d436.svg\" width=\"14\" height=\"17\"\/> as a <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\textit{response}\" alt=\"\\textit{response}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/560\/5de\/b86\/5605deb86b81e175dc602026bd0f8c2b.svg\" width=\"72\" height=\"15\"\/>).<\/p>\n<p>The parties independently compute a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p> \u00a0<img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74a\/a76\/cf6\/74aa76cf61c9d32d951d93a80a457d9c.svg\" width=\"14\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}=[\\upsilon]\\mathsf{T}=[\\upsilon\\phi\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{A}=[\\upsilon]\\mathsf{T}=[\\upsilon\\phi\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b73\/3b8\/4c0\/b733b84c08a4fd501989c0d7dc20cd44.svg\" width=\"255\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_1=\\hslash(x_{\\mathsf{A}}\\|y_{\\mathsf{A}}).\" alt=\"g_1=\\hslash(x_{\\mathsf{A}}\\|y_{\\mathsf{A}}).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/edd\/297\/23f\/edd29723fbde5c8bdb257b7bd4f3760c.svg\" width=\"127\" height=\"22\"\/><\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p> \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/547\/97f\/096\/54797f0968761aa25b85feb94b6127d6.svg\" width=\"15\" height=\"17\"\/> computes <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}=[\\phi]\\mathsf{S}=[\\phi\\upsilon\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{B}=[\\phi]\\mathsf{S}=[\\phi\\upsilon\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/75f\/23c\/02c\/75f23c02cb69b8df5e80ed0106be80ce.svg\" width=\"254\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_3=\\hslash(x_{\\mathsf{B}}\\|y_{\\mathsf{B}}).\" alt=\"g_3=\\hslash(x_{\\mathsf{B}}\\|y_{\\mathsf{B}}).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/09b\/adb\/127\/09badb12767e3f2dfba267377acf693e.svg\" width=\"127\" height=\"22\"\/><\/p>\n<\/li>\n<\/ol>\n<p>Obviously, <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\/a0b\/6c2\/db0\/a0b6c2db08c73be75869153d8076a4e9.svg\" width=\"51\" height=\"17\"\/> due to commutativity. Therefore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_1=g_3.\" alt=\"g_1=g_3.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c86\/2bd\/f73\/c862bdf73750093c3a450663c008cee5.svg\" width=\"67\" height=\"15\"\/> As for the IDS, then:<\/p>\n<p>1. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/773\/436\/c1c\/773436c1c67c6b3e5fc9a4ec8d5351b8.svg\" width=\"14\" height=\"17\"\/> generates a signature for the given message <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"M\" alt=\"M\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/062\/a79\/45d\/062a7945d0e2370475b849475c52b12b.svg\" width=\"20\" height=\"17\"\/> using <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_1,\" alt=\"g_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/44d\/8fa\/ad1\/44d8faad1c54a39f5bc1e9aa6f26af1b.svg\" width=\"23\" height=\"15\"\/> given the value of the hash function <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hslash(g_1\\|M\\|\\ldots).\" alt=\"\\hslash(g_1\\|M\\|\\ldots).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/074\/987\/492\/074987492360c8d9bebfb133f01c85be.svg\" width=\"115\" height=\"22\"\/><\/p>\n<p>2. \u00a0 <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ed\/c9e\/66c\/8edc9e66cdad877a1b1d048c90f2e325.svg\" width=\"15\" height=\"17\"\/> checks the signature for some message <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"M'\" alt=\"M'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/424\/589\/969\/42458996991cab42fe727508233a761d.svg\" width=\"26\" height=\"19\"\/> using <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_3\" alt=\"g_3\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ee1\/b55\/59f\/ee1b5559f97fc3ce0df37cd47ffd30e3.svg\" width=\"18\" height=\"15\"\/> given the hash function value <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\hslash(g_3\\|M'\\|\\ldots).\" alt=\"\\hslash(g_3\\|M'\\|\\ldots).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e4a\/86b\/6a1\/e4a86b6a1ff0dab9e0e13e18da2d79ea.svg\" width=\"121\" height=\"23\"\/><\/p>\n<p>The advantage of the above mentioned solution is that the changes relate to arithmetic operations and do not affect the logic of the protocol. This is an important circumstance, since any fundamental modifications would lead to the need to study the cryptographic strength of the new design with all the ensuing consequences.<\/p>\n<p>Earlier, we noted that we have a protocol with similar functionality that solves this problem, but at the same time allows us to recognize that the prover belongs to a certain local community of registered participants.<\/p>\n<p><strong>Preliminary analysis<\/strong><\/p>\n<p>Let&#8217;s note that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon, \\phi\" alt=\"\\upsilon, \\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78b\/9b1\/a61\/78b9b1a61701563c2ee8af3373dd52a4.svg\" width=\"30\" height=\"20\"\/> are only known to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/12b\/c6e\/656\/12bc6e6566903484ac23e97fb5778d1f.svg\" width=\"14\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V,\" alt=\"V,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b99\/f35\/fc9\/b99f35fc9c37d2b32fbb78b7830db2bd.svg\" width=\"20\" height=\"20\"\/> respectively. Then an attacker can get <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3fa\/94d\/1c9\/3fa94d1c91931e783f58eafc195b41da.svg\" width=\"10\" height=\"12\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi\" alt=\"\\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0ee\/439\/eaf\/0ee439eafcf21f8ea11d10cefeaff304.svg\" width=\"11\" height=\"20\"\/> by finding an ECDLP solution given <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}\" alt=\"\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40e\/84c\/45d\/40e84c45dd679b6402f9afc10536487d.svg\" width=\"11\" height=\"17\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}\" alt=\"\\mathsf{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cdb\/5d1\/032\/cdb5d10321594c0ebe88aa79448cf416.svg\" width=\"13\" height=\"17\"\/> respectively. It is also possible to find a DLP solution if <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{S}, \\mathsf{G}_1)\" alt=\"e_m(\\mathsf{S}, \\mathsf{G}_1)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b99\/033\/2f6\/b990332f65f79c05294dd40ba01a6dcf.svg\" width=\"79\" height=\"22\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"e_m(\\mathsf{T}, \\mathsf{G}_1).\" alt=\"e_m(\\mathsf{T}, \\mathsf{G}_1).\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf0\/8c9\/7cc\/cf08c97cc7909843e84c101f5e75fc16.svg\" width=\"87\" height=\"22\"\/> The purpose of the <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\/7c8\/d92\/988\/7c8d929884a4a53c82751208030bbb7e.svg\" width=\"57\" height=\"22\"\/> function, as well as the relationship between ECDLP and DLP, is explained in <a href=\"https:\/\/mega.nz\/file\/hWpSHQIC#EeoLF6XCGjbS0jItr1_xrOTeoFfa7Rv3H1ZCwaODSW8\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>. Since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"g_1=g_3,\" alt=\"g_1=g_3,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f92\/669\/ea2\/f92669ea2dc212102941a9c10fa46e27.svg\" width=\"67\" height=\"15\"\/> only someone who knows <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon\" alt=\"\\upsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/07a\/540\/634\/07a540634d2461877f23dfe74d591c86.svg\" width=\"10\" height=\"12\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\phi,\" alt=\"\\phi,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/848\/30f\/bdb\/84830fbdb574e19f7275d2dfcda5b0ee.svg\" width=\"17\" height=\"20\"\/> as well as the secret key of an arbitrary DS scheme chosen for this goal is able to generate the IDS.<\/p>\n<p>An active attacker, using interception and blocking techniques, is able to impose <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}'=[\\upsilon']\\mathsf{G}_1\" alt=\"\\mathsf{S}'=[\\upsilon']\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cdf\/860\/08c\/cdf86008ccdafa58a74e9b48da18c592.svg\" width=\"91\" height=\"24\"\/> instead of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S},\" alt=\"\\mathsf{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fd6\/e1e\/a8f\/fd6e1ea8f4a1a9ca33370ffd1965fd34.svg\" width=\"16\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}'=[\\phi']\\mathsf {G}_1\" alt=\"\\mathsf{T}'=[\\phi']\\mathsf {G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/834\/e91\/744\/834e917440846d242940c2c6613c5f8e.svg\" width=\"94\" 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\/750\/09c\/574\/75009c574fbd18eb5ac818084a94a6d1.svg\" width=\"13\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}'=[\\mathbf{x}]\\mathsf{T}'+\\mathsf{S}'\" alt=\"\\mathsf{N}'=[\\mathbf{x}]\\mathsf{T}'+\\mathsf{S}'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/636\/e4c\/e0c\/636e4ce0ce2ebf6f29ef75036c8a831d.svg\" width=\"126\" height=\"24\"\/> instead of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}\" alt=\"\\mathsf{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2b\/c62\/87b\/f2bc6287b01bd0c5032e918660edc0ae.svg\" width=\"14\" height=\"17\"\/> when <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\upsilon'\\neq \\upsilon, \\phi'\\neq\\phi.\" alt=\"\\upsilon'\\neq \\upsilon, \\phi'\\neq\\phi.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ada\/b82\/676\/adab82676094a4af8c4b96a79a4520dc.svg\" width=\"121\" height=\"23\"\/> For example, these may be messages from another session. However, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf3\/a13\/82c\/bf3a1382c0eca213296f88d74a855d0d.svg\" width=\"15\" height=\"17\"\/> will overwhelmingly reject the provided proof, since <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}'=\\mathsf{N}'+[\\phi]\\mathsf{R}=[\\mathbf{x}(\\phi'-\\phi)+ \\upsilon'\\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{Q}'=\\mathsf{N}'+[\\phi]\\mathsf{R}=[\\mathbf{x}(\\phi'-\\phi)+ \\upsilon'\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/181\/1e6\/250\/1811e6250837c137ce5faba5bba35733.svg\" width=\"397\" height=\"24\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}'}=x_{\\mathsf{S}'}\" alt=\"x_{\\mathsf{Q}'}=x_{\\mathsf{S}'}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6da\/7b2\/2bd\/6da7b22bdd96e884c274b2f738a46153.svg\" width=\"77\" height=\"18\"\/> with negligible probability. In addition, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}'=[\\upsilon]\\mathsf{T}'=[\\upsilon\\phi'\\pmod m]\\mathsf{G}_1,\" alt=\"\\mathsf{A}'=[\\upsilon]\\mathsf{T}'=[\\upsilon\\phi'\\pmod m]\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0e9\/428\/689\/0e9428689fa61b4e9b24663835898264.svg\" width=\"273\" height=\"23\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}'=[\\phi]\\mathsf{S}'=[\\phi\\upsilon'\\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{B}'=[\\phi]\\mathsf{S}'=[\\phi\\upsilon'\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/114\/2ed\/135\/1142ed135b6d4652c78bc7ccb11e16e3.svg\" width=\"266\" height=\"24\"\/> and <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\/b9a\/02d\/490\/b9a02d4905d09229fc965b5d13db7880.svg\" width=\"63\" height=\"19\"\/> with negligible probability.<\/p>\n<p><strong>The amount of information transmitted<\/strong><\/p>\n<p>We will use the compact curve point representation [Cohen_etc._2006] (section 13.2.5).<\/p>\n<p>The point <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}\" alt=\"\\mathsf{Q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46c\/a68\/e07\/46ca68e07182422ddccbcab221bfc09f.svg\" width=\"14\" height=\"19\"\/> is given by a pair of coordinates <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}}, y_{\\mathsf{Q}} \\in\\mathbb{F}_p.\" alt=\"x_{\\mathsf{Q}}, y_{\\mathsf{Q}} \\in\\mathbb{F}_p.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f8\/dd2\/2e5\/8f8dd22e5a4c570c39967b168be5487f.svg\" width=\"102\" height=\"22\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}\" alt=\"\\mathsf{Q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aff\/655\/228\/aff655228495c7b983eda2fcef1d14dc.svg\" width=\"14\" height=\"19\"\/> belongs to the curve, then the equation <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_{\\mathsf{Q}}^2=x_{\\mathsf{Q}}^3+ax_{\\mathsf{Q}}+b\" alt=\"y_{\\mathsf{Q}}^2=x_{\\mathsf{Q}}^3+ax_{\\mathsf{Q}}+b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bea\/563\/452\/bea563452aa7b01c327d50c87b2154a4.svg\" width=\"159\" height=\"28\"\/> is true for some <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"a, b\\in\\mathbb{F }_p.\" alt=\"a, b\\in\\mathbb{F }_p.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05c\/27d\/fce\/05c27dfced915bafadc0892796c51129.svg\" width=\"77\" height=\"22\"\/> This equation can be interpreted as <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_{\\mathsf{Q}}^2 \\equiv r \\bmod p,\" alt=\"y_{\\mathsf{Q}}^2 \\equiv r \\bmod p,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/851\/e9b\/826\/851e9b826e76dfb54684b54bf9fec34a.svg\" width=\"118\" height=\"27\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"r\" alt=\"r\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/88d\/783\/e57\/88d783e5778b9f5a2cba01d59efb6d27.svg\" width=\"9\" height=\"12\"\/> is a quadratic residue and then there are only two solutions <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\pm y_\\mathsf{Q}.\" alt=\"\\pm y_\\mathsf{Q}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/373\/f64\/835\/373f64835d71acd91a0f8db097eca3b7.svg\" width=\"42\" height=\"20\"\/> For <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_\\mathsf{Q}&lt;p\" alt=\"y_\\mathsf{Q}&lt;p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/415\/a7a\/567\/415a7a5679d6685f08f6280c700a2c57.svg\" width=\"57\" height=\"18\"\/> the solution is <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"-y_\\mathsf{Q}\\bmod p=p-y_\\mathsf{Q}.\" alt=\"-y_\\mathsf{Q}\\bmod p=p-y_\\mathsf{Q}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b85\/844\/7d5\/b858447d5c5b55e0cefc9cf8ba5d83dc.svg\" width=\"179\" height=\"21\"\/> If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_{\\mathsf{Q}}\" alt=\"y_{\\mathsf{Q}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf2\/3de\/9d5\/cf23de9d534382ed2505324c58b0863a.svg\" width=\"21\" height=\"16\"\/> is even, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(p-y_{\\mathsf{Q}})\" alt=\"(p-y_{\\mathsf{Q}})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/77c\/b0e\/21d\/77cb0e21d47410f1a24e0d8fc30933ab.svg\" width=\"70\" height=\"22\"\/> is odd, and vice versa. In the general case, of two solutions, one is always even and the other is odd.<\/p>\n<p>Let the point <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}\" alt=\"\\mathsf{Q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/db0\/c23\/15e\/db0c2315e6d0d62ad00f96f2a60f309f.svg\" width=\"14\" height=\"19\"\/> be represented by the coordinate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}}.\" alt=\"x_{\\mathsf{Q}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/855\/e1b\/7cc\/855e1b7cc44df2dd360de3b8b08b9f42.svg\" width=\"28\" height=\"16\"\/> We will transmit over the communication channel <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(x_{\\mathsf{Q}}, \\mathfrak{s}),\" alt=\"(x_{\\mathsf{Q}}, \\mathfrak{s}),\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f3b\/d9d\/d38\/f3bd9dd38567793d5d08c71e879fb824.svg\" width=\"60\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{s}\" alt=\"\\mathfrak{s}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/77f\/aa2\/e18\/77faa2e1841e5e6311813395d9fd26a8.svg\" width=\"9\" height=\"13\"\/> is a binary variable that allows us to determine the desired solution from a pair of possible ones. Let&#8217;s make it a rule that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{s}=0\" alt=\"\\mathfrak{s}=0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/414\/080\/678\/4140806786d2efd7a9e978e2402249af.svg\" width=\"44\" height=\"16\"\/> means even, and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathfrak{s}=1\" alt=\"\\mathfrak{s}=1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5fb\/426\/c30\/5fb426c30d495db96d655643aee7bbf6.svg\" width=\"44\" height=\"16\"\/> means odd. For example, for <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(x_\\mathsf{Q}, 1)\" alt=\"(x_\\mathsf{Q}, 1)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/df9\/889\/9cf\/df98899cf17f1d8c96a8898d9381570d.svg\" width=\"56\" height=\"22\"\/> one should get a pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{y_{\\mathsf{Q}}, p-y_{\\mathsf{Q}}\\}\" alt=\"\\{y_{\\mathsf{Q}}, p-y_{\\mathsf{Q}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c6\/3d3\/930\/8c63d393005c8e8e2abf57d78028a8a6.svg\" width=\"104\" height=\"22\"\/> and then choose an odd solution from this pair.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\lceil\\log_{2}p\\rceil+1\" alt=\"\\lceil\\log_{2}p\\rceil+1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f86\/a84\/11c\/f86a8411cea3d59624f5c4a54903b201.svg\" width=\"97\" height=\"22\"\/> bits of memory is required to store an arbitrary point on the curve. In <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathbb{F}_p,\" alt=\"\\mathbb{F}_p,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/926\/b51\/fb5\/926b51fb5c3177ba5a2c3ca604d48e0d.svg\" width=\"26\" height=\"22\"\/> the square root is computed using the Tonelli-Shanks algorithm of asymptotic computational complexity <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"O(\\log_{2}^2{p})\" alt=\"O(\\log_{2}^2{p})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d4\/35e\/3a7\/1d435e3a797af6a3991e8e6bbf44b7fd.svg\" width=\"76\" height=\"25\"\/> [Cohen_etc._2006] (section 11.1.5).<\/p>\n<p>Then, to restore the <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}\" alt=\"\\mathsf{Q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff0\/59f\/7e2\/ff059f7e2dc88ad276ccdc5af3f6daab.svg\" width=\"14\" height=\"19\"\/> point, it&#8217;s necessary to perform the following actions:<\/p>\n<p>1. \u00a0 For a given coordinate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}},\" alt=\"x_{\\mathsf{Q}},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca1\/578\/af9\/ca1578af93a5496c3a179f882b7b5a44.svg\" width=\"28\" height=\"16\"\/> a certain coordinate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_*\" alt=\"y_*\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c9\/6d2\/dae\/8c96d2daed5ec485260a97edcc47a84b.svg\" width=\"18\" height=\"15\"\/> is computed using the Tonelli-Shanks algorithm.<\/p>\n<p>2. \u00a0 If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathfrak{s}=1)\\land(y_*\\bmod 2\\neq 0)\" alt=\"(\\mathfrak{s}=1)\\land(y_*\\bmod 2\\neq 0)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/992\/aeb\/f70\/992aebf70a3eed5d09eb8add2120d1e3.svg\" width=\"206\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_\\mathsf{Q}=y_*.\" alt=\"y_\\mathsf{Q}=y_*.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/30e\/e3c\/43b\/30ee3c43b8f18bfd2c51d0e5f61f349f.svg\" width=\"71\" height=\"16\"\/><\/p>\n<p>3. \u00a0 If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathfrak{s}=1)\\land(y_*\\bmod 2=0)\" alt=\"(\\mathfrak{s}=1)\\land(y_*\\bmod 2=0)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6b\/710\/141\/b6b710141721f113af8d8b8cba21f2a9.svg\" width=\"206\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_\\mathsf{Q}=p-y_*.\" alt=\"y_\\mathsf{Q}=p-y_*.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/621\/4cc\/07b\/6214cc07bdd76b8af44e804ed5da3e1d.svg\" width=\"104\" height=\"19\"\/><\/p>\n<p>4. \u00a0 If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathfrak{s}=0)\\land(y_*\\bmod 2=0)\" alt=\"(\\mathfrak{s}=0)\\land(y_*\\bmod 2=0)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec1\/927\/522\/ec19275227eafc642398b88e064856be.svg\" width=\"206\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_\\mathsf{Q}=y_*.\" alt=\"y_\\mathsf{Q}=y_*.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a2\/ca5\/235\/7a2ca5235919ceaeb2d17b026a98ff21.svg\" width=\"71\" height=\"16\"\/><\/p>\n<p>5. \u00a0 If <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"(\\mathfrak{s}=0)\\land(y_*\\bmod 2\\neq 0)\" alt=\"(\\mathfrak{s}=0)\\land(y_*\\bmod 2\\neq 0)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/181\/b79\/009\/181b79009431492310be364a99c50e10.svg\" width=\"206\" height=\"22\"\/> then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"y_\\mathsf{Q}=p-y_*.\" alt=\"y_\\mathsf{Q}=p-y_*.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bc\/31e\/5b0\/6bc31e5b0a92acd98278af30e9d017f5.svg\" width=\"104\" height=\"19\"\/><\/p>\n<p>If the compact representation is used, then <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"3(\\lceil\\log_{2}{p}\\rceil+1)\" alt=\"3(\\lceil\\log_{2}{p}\\rceil+1)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6aa\/bf1\/440\/6aabf1440fc96969112dfba324c12305.svg\" width=\"121\" height=\"22\"\/> bits would need to be transmitted to deliver <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S},\" alt=\"\\mathsf{S},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/87d\/fff\/551\/87dfff551d44b231c7c71f682ee0cdbe.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\/3e5\/1e8\/047\/3e51e804731702fd3cb8e63bede1b833.svg\" width=\"18\" height=\"20\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}\" alt=\"\\mathsf{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/338\/d1f\/1ee\/338d1f1ee2177876f5ec4c7957ad7278.svg\" width=\"14\" height=\"17\"\/> in total. For comparison, in the original Schnorr protocol, under the same conditions, for the delivery of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}, \\phi\" alt=\"\\mathsf{S}, \\phi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a9\/b65\/ba9\/8a9b65ba9c2689a8456616c022db3f31.svg\" width=\"31\" height=\"20\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\psi\" alt=\"\\psi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e2\/a3c\/176\/4e2a3c1765896252e394e39ade4a0c9d.svg\" width=\"13\" height=\"20\"\/> in total, it is necessary to send <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"2(\\lceil\\log_{2}m\\rceil)+\\lceil\\log_{2}p \\rceil+1\" alt=\"2(\\lceil\\log_{2}m\\rceil)+\\lceil\\log_{2}p \\rceil+1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2fd\/97f\/b36\/2fd97fb36af91a7edc20047f8ff9bd4a.svg\" width=\"216\" height=\"22\"\/> bits.<\/p>\n<p><strong>Computation optimization<\/strong><\/p>\n<p>The complexity depends on the methods for computing the scalar multiplication, as well as the choice of the computing platform. Thus, for example, tests that were carried out using a test bench implemented in the Scala v2.13.6 programming language on a MacBook Pro (15-inch, 2016) hardware platform with a 4-core Intel Core i7 processor running macOS Monterey version 12.6.2 using primitives from the <a href=\"https:\/\/crypto.stanford.edu\/pbc\/\" rel=\"noopener noreferrer nofollow\"><u>PBC library<\/u><\/a> show that due to the preprocessing possible for the constant <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{G}_1,\" alt=\"\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e4\/d78\/31e\/4e4d7831e95154e8f9c506f41f1a8e53.svg\" width=\"27\" height=\"20\"\/> the scalar product <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}_1=[\\alpha]\\mathsf{G}_1\" alt=\"\\mathsf{Q}_1=[\\alpha]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c59\/2ed\/b1e\/c592edb1e6021fd9b4c07655e9febbf9.svg\" width=\"93\" height=\"22\"\/> is on average 85.37% more efficient than the scalar products <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}_2=[\\alpha]\\mathsf{P},\" alt=\"\\mathsf{Q}_2=[\\alpha]\\mathsf{P},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7d\/05b\/adf\/c7d05badf0bf2afc4a6724fae515ed51.svg\" width=\"89\" height=\"22\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}\\neq\\mathsf{G}_1\\neq const.\" alt=\"\\mathsf{P}\\neq\\mathsf{G}_1\\neq const.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd7\/5fe\/e1e\/bd75fee1ed3fa3b969ecf018c12d2281.svg\" width=\"136\" height=\"21\"\/> The measurement results are summarized in Table 1.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5f0\/854\/b10\/5f0854b10500a872594ef2c07ee9d80d.png\" width=\"956\" height=\"310\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f0\/854\/b10\/5f0854b10500a872594ef2c07ee9d80d.png\"\/><\/figure>\n<p><strong>IDS mode and public key certificates<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/479\/533\/832\/479533832ca72111517bfeb5478f04a9.svg\" width=\"14\" height=\"17\"\/> owns the key pair <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{\\mathbf{x}, \\mathsf{R}\\}.\" alt=\"\\{\\mathbf{x}, \\mathsf{R}\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9dd\/640\/2b9\/9dd6402b93f7368eac632944d8e187c4.svg\" width=\"57\" height=\"22\"\/> A corresponding certificate is issued for the public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R}.\" alt=\"\\mathsf{R}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a3d\/7af\/a5b\/a3d7afa5bc7c7f78125bdcfb0dbeb898.svg\" width=\"18\" height=\"17\"\/> The following question needs to be answered: what benefit can be gained from the IDS mode with a public key certificate?<\/p>\n<p>Let the certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" alt=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/741\/386\/7b6\/7413867b6cbca59507c408529d096183.svg\" width=\"97\" height=\"22\"\/> be issued for the public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R},\" alt=\"\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c3\/45b\/dbc\/5c345bdbcd023d05250850da94581044.svg\" width=\"18\" height=\"20\"\/> where <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\Im_{\\mathsf{R}} \\Leftarrow{\\rm{Sign}}(\\hslash(\\mathsf{R}||D_{\\mathsf{R}}), \\rm{S}_T)\" alt=\"\\Im_{\\mathsf{R}} \\Leftarrow{\\rm{Sign}}(\\hslash(\\mathsf{R}||D_{\\mathsf{R}}), \\rm{S}_T)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/853\/912\/58c\/85391258c328806a25b41f93c9a57390.svg\" width=\"210\" height=\"22\"\/> \u2014 DS of trusted party <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T,\" alt=\"T,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/942\/3ac\/d86\/9423acd86bfcebdef48fdef2639dbda2.svg\" width=\"19\" height=\"20\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D_{\\mathsf{R} }\" alt=\"D_{\\mathsf{R} }\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5eb\/230\/a32\/5eb230a3291f75acb11b0ccb75b92573.svg\" width=\"27\" height=\"19\"\/> \u2014 personal data of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/468\/fc3\/9e6\/468fc39e65a6dbfcc553f1930e44ebd2.svg\" width=\"14\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\rm{S}_T\" alt=\"\\rm{S}_T\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/004\/4a3\/813\/0044a3813fd952d5e4bd7ed6d7a17dd6.svg\" width=\"22\" height=\"19\"\/> \u2014 secret key of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"T,\" alt=\"T,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe9\/4de\/36a\/fe94de36a66c6cd95cfe1e0aa914e4ac.svg\" width=\"19\" height=\"20\"\/> intended for generating the certificate&#8217;s DS.<\/p>\n<p>Let&#8217;s set up a thought experiment and, in the absence of the DS mode, assume that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b29\/907\/a80\/b29907a80e1a278761236f9a0b22bbd3.svg\" width=\"14\" height=\"17\"\/> sends <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e9c\/578\/5e9\/e9c5785e980e090076fbdc0d8324fdf5.svg\" width=\"15\" height=\"17\"\/> some digitally certified personal data <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D'.\" alt=\"D'.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a6\/fe2\/63d\/3a6fe263d596cb6f7a084a4eba03a826.svg\" width=\"27\" height=\"19\"\/> Furthermore, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/520\/cf7\/ede\/520cf7ede0f0a1799e01c5d6c27247ee.svg\" width=\"14\" height=\"17\"\/> claims that <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D'\" alt=\"D'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c0\/fac\/c6f\/4c0facc6f0b2902fd040ec8f1993a328.svg\" width=\"22\" height=\"19\"\/> is his own personal data. It should be noted right away that this data could have been obtained in various ways, for example, as a result of collusion, the use of social engineering methods, or simply copied from publicly available long-term memory. To verify the digital signature, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/430\/fb5\/672\/430fb5672d6c1e6d66a3e859d4b5e56a.svg\" width=\"15\" height=\"17\"\/> must use the public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}'\" alt=\"\\mathsf{P}'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c4\/8c7\/ad1\/5c48c7ad19400b94d2a3543606bc4c7d.svg\" width=\"18\" height=\"19\"\/> from the certificate <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D',\\mathsf{P}', \\Im_{\\mathsf{P}'}\\}.\" alt=\"\\{D',\\mathsf{P}', \\Im_{\\mathsf{P}'}\\}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/29a\/a3d\/7f2\/29aa3d7f23a2dc3f3122ce95b9c966b5.svg\" width=\"107\" height=\"23\"\/> Let&#8217;s also assume that all necessary checks have confirmed the authenticity and integrity of <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{P}', D'.\" alt=\"\\mathsf{P}', D'.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d8f\/69b\/ee2\/d8f69bee2ded69bdb64dd384a572e4e4.svg\" width=\"54\" height=\"22\"\/><\/p>\n<p>As a result, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff0\/952\/187\/ff095218716cee4862ad591b7eafbfed.svg\" width=\"15\" height=\"17\"\/> has two certificates <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" alt=\"\\{D_{\\mathsf{R}},\\mathsf{R}, \\Im_{\\mathsf{R}}\\}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3c1\/893\/0ca\/3c18930ca066fe795fc892880582a2de.svg\" width=\"97\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\{D',\\mathsf{P}', \\Im_{ \\mathsf{P}'}\\},\" alt=\"\\{D',\\mathsf{P}', \\Im_{ \\mathsf{P}'}\\},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e2d\/502\/2d9\/e2d5022d92226a54080e6c9e85beea8b.svg\" width=\"107\" height=\"23\"\/> each issued by a trusted CA. Consider the case when <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D_{\\mathsf{R}}\\neq D' (D_{\\mathsf{R}}=D'\" alt=\"D_{\\mathsf{R}}\\neq D' (D_{\\mathsf{R}}=D'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/38d\/db2\/bca\/38ddb2bca6cf8592497be188ab03aeed.svg\" width=\"156\" height=\"23\"\/> is treated uniquely). As a result, <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c6\/02d\/808\/0c602d8086f905bf5d7dac226859ec58.svg\" width=\"15\" height=\"17\"\/> is unable to make a correct choice about <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D_{\\mathsf{R}}\" alt=\"D_{\\mathsf{R}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/192\/d11\/664\/192d116647bf6838ac1c9ffbc5dbfbb1.svg\" width=\"27\" height=\"19\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D'\" alt=\"D'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5ae\/2c6\/8a2\/5ae2c68a2b88b326063d8f2e8fe0b8bc.svg\" width=\"22\" height=\"19\"\/> because there is no decision criterion. Obviously, such uncertainty is unacceptable.<\/p>\n<p>If the IDS mode is enabled, then when making a decision about <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D_{\\mathsf{R}}\" alt=\"D_{\\mathsf{R}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e8\/194\/9f3\/9e81949f3c7b68a0851199409dc6f885.svg\" width=\"27\" height=\"19\"\/> or <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"D',\" alt=\"D',\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/877\/b49\/459\/877b4945989dd90e24ffb165a0dd2017.svg\" width=\"27\" height=\"22\"\/> <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d9\/e3b\/566\/8d9e3b566aa1f54909b50176e5072b35.svg\" width=\"15\" height=\"17\"\/> relies on the proof that was provided to <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e8e\/c7d\/dc0\/e8ec7ddc09b77b760721cd7510ccc43b.svg\" width=\"14\" height=\"17\"\/> at the identification stage. <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e25\/922\/52c\/e2592252c14b545914a9747fd19ea1e7.svg\" width=\"15\" height=\"17\"\/> reasons using the following logic.<\/p>\n<p>A DS for personal data can only be generated by someone who simultaneously has access to the variables of a separate identification protocol session, both public and secret, including the secret key for generating a DS.<\/p>\n<p>Let&#8217;s assume that the digital signature was obtained as a result of collusion. To do this, an attacker must force the owner of personal data to certify this data with his DS, but with the inclusion of some auxiliary data, about which the certifier does not know anything. Based on the associated risk model, such an event seems implausible. It is overwhelmingly likely that the witness will refuse to include such data fearing undesirable consequences, such as implicit debt imposition, blacklisting, account blocking, and so on.<\/p>\n<p><strong>Open verification in the Schnorr protocol<\/strong><\/p>\n<p>The peculiarity of the Schnorr protocol is that anyone with access to the variables <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}, \\phi,\" alt=\"\\mathsf{S}, \\phi,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/53c\/d72\/07b\/53cd7207baedbe6a4589bab4423592af.svg\" width=\"36\" height=\"20\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\psi\" alt=\"\\psi\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1fa\/043\/e75\/1fa043e759c9d8cd60863ba5f3e78deb.svg\" width=\"13\" height=\"20\"\/> can verify the correctness of the evaluation made by <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f89\/ae3\/ddb\/f89ae3ddb630ca73a72ff91052f7837f.svg\" width=\"15\" height=\"17\"\/> towards the proof given by <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P.\" alt=\"P.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/116\/c12\/c5c\/116c12c5c7189abc3d07e98fd32dde2d.svg\" width=\"20\" height=\"17\"\/><\/p>\n<p>Indeed, the variables mentioned above are transmitted over an insecure communication channel and, therefore, are publicly available. Since anyone can use the public key <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{R},\" alt=\"\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/acb\/ae7\/c2c\/acbae7c2c28c66cabad2d8cb91225db4.svg\" width=\"18\" height=\"20\"\/> it is not necessary to have <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b45\/17b\/958\/b4517b958329e762dacacd5e1bd4a058.svg\" width=\"15\" height=\"17\"\/> authority to compute <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=[\\psi]\\mathsf{G}_1+[\\phi]\\mathsf{R}= [\\psi-\\phi\\mathbf{x}\\pmod m]\\mathsf{G}_1\" alt=\"\\mathsf{Q}=[\\psi]\\mathsf{G}_1+[\\phi]\\mathsf{R}= [\\psi-\\phi\\mathbf{x}\\pmod m]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/174\/b52\/057\/174b520579dc6d3288a7f067a241a9e5.svg\" width=\"358\" height=\"22\"\/> and then check <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"x_{\\mathsf{Q}}\\stackrel{?}{=}x_{\\mathsf{S}}.\" alt=\"x_{\\mathsf{Q}}\\stackrel{?}{=}x_{\\mathsf{S}}.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f7\/f49\/3a2\/2f7f493a253b7bfd9bc660f29237c371.svg\" width=\"75\" height=\"30\"\/><\/p>\n<p>The practical meaning here is the ability to control the actions of both <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59d\/3e5\/a9e\/59d3e5a9e58c2219c0ffc78be8cba5e7.svg\" width=\"15\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P.\" alt=\"P.\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d2\/e77\/a27\/1d2e77a2749244f2200050a4c0102306.svg\" width=\"20\" height=\"17\"\/> This is important in the case when disagreements may arise. For example, when <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"P\" alt=\"P\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/14e\/6cf\/e6e\/14e6cfe6ec2232b189f68412b20aafb3.svg\" width=\"14\" height=\"17\"\/> claims to have provided the correct proof, but <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"V\" alt=\"V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26e\/f33\/826\/26ef338267a5680792eb44abf769c1b8.svg\" width=\"15\" height=\"17\"\/> denies it.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>Estimates of the amount of transmitted information for the original Schnorr protocol and the modification described above differ insignificantly.<\/p>\n<p>The original Schnorr protocol uses three scalar multiplications, while the modification of the protocol uses four such multiplications. Since the scalar multiplications <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{S}=[\\upsilon]\\mathsf{G}_1\" alt=\"\\mathsf{S}=[\\upsilon]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ac\/219\/bab\/6ac219bab3d282bae535d66d88e7c974.svg\" width=\"79\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{T}=[\\phi]\\mathsf{G}_1\" alt=\"\\mathsf{T}=[\\phi]\\mathsf{G}_1\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d05\/4a3\/d88\/d054a3d88f0ea5fbd4ac83b1f8d8e025.svg\" width=\"83\" height=\"22\"\/> are computed using the generating element <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{G}_1,\" alt=\"\\mathsf{G}_1,\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f92\/ebf\/3e8\/f92ebf3e832900aea0fd454200dc3d0f.svg\" width=\"27\" height=\"20\"\/> the optimization is possible. This optimization allows to reduce computational complexity in exchange for the allocation of additional memory for storing intermediate results (see Table 1). Note that in the original protocol, when computing the point <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=[\\psi]\\mathsf{G}_1+[\\phi]\\mathsf{R},\" alt=\"\\mathsf{Q}=[\\psi]\\mathsf{G}_1+[\\phi]\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/95e\/7df\/181\/95e7df18143edf0fb8aeb34f3a21c6dc.svg\" width=\"148\" height=\"22\"\/> only partial optimization is allowed. However, in the modified protocol, when computing the points <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{N}\" alt=\"\\mathsf{N}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/554\/b75\/ee1\/554b75ee161a68c2c52819b18aa90afd.svg\" width=\"14\" height=\"17\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{Q}=\\mathsf{N}+[\\phi]\\mathsf{R},\" alt=\"\\mathsf{Q}=\\mathsf{N}+[\\phi]\\mathsf{R},\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c4\/7b7\/e20\/1c47b7e204e35275c8c5bdcb1517f5b8.svg\" width=\"117\" height=\"22\"\/> as well as the scalar multiplications <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{A}=[\\upsilon]\\mathsf{T}\" alt=\"\\mathsf{A}=[\\upsilon]\\mathsf{T}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be0\/8eb\/bcd\/be08ebbcd427497f0b1dda49d9467441.svg\" width=\"73\" height=\"22\"\/> and <img loading=\"lazy\" decoding=\"async\" class=\"formula inline\" source=\"\\mathsf{B}=[\\phi]\\mathsf{S}\" alt=\"\\mathsf{B}=[\\phi]\\mathsf{S}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/07c\/f04\/abc\/07cf04abc5170480b0cdb0608064d37e.svg\" width=\"72\" height=\"22\"\/> such optimization is impossible.<\/p>\n<p>In the proposed modification of the protocol, open verification is not feasible.<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>It should be attested that we were able to solve the problem for a particular protocol in a relatively simple way. However, for an arbitrary identification protocol, the problem of compatibility with the IDS mode remains open. In the future, we will attempt to find a solution to the problem for some well-known identification protocol that is different from the Schnorr protocol.<\/p>\n<p>The text of the article in pdf format <a href=\"https:\/\/mega.nz\/file\/0SwmiB5L#N_6B_pAz8VvYNDr5x7hr0OXTcHs0CPEU0iR-Q9KuZPA\" rel=\"noopener noreferrer nofollow\">can be downloaded here<\/a>.<\/p>\n<p><strong>Bibliography<\/strong><\/p>\n<p>[Cohen_etc._2006] Cohen, H., Frey, G., Roberto Avanzi, R., Doche C., Lange, T., Nguyen, K. and Vercauteren, F. Handbook of Elliptic and Hyperelliptic Curve Cryptography, Chapman and Hall \/CRC, 2006.<\/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\/748354\/\"> https:\/\/habr.com\/ru\/articles\/748354\/<\/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>This post describes a modification of the Schnorr identification protocol which is compatible with the instant digital signature mode.<\/p>\n<p><strong>Introduction<\/strong><\/p>\n<p>The<a href=\"https:\/\/habr.com\/ru\/articles\/733124\/\" rel=\"noopener noreferrer nofollow\"> <u>article<\/u><\/a> describes the interactive Schnorr identification protocol (hereinafter referred to as the Schnorr protocol) and formulates the problem of compatibility of this protocol with the instant digital signature (IDS) mode. This post shows how to modify the Schnorr protocol to provide such compatibility.<\/p>\n<p><strong>IDS-compatible Schnorr protocol<\/strong><\/p>\n<p>Recall that some information about the arithmetic of elliptic curve points, as well as an explanation of ECDLP and DLP, was explained by our<a href=\"https:\/\/habr.com\/ru\/articles\/572994\/\" rel=\"noopener noreferrer nofollow\"> <u>previous publication<\/u><\/a>.<\/p>\n<p>For the sake of simplicity, we will leave everything that concerns the Schnorr protocol unchanged, including the key pair  and the certificate <\/p>\n<p>If we interpret the <a href=\"https:\/\/habr.com\/ru\/articles\/733124\/\" rel=\"noopener noreferrer nofollow\"><u>necessary condition<\/u><\/a>, then IDS-compatibility is possible when  and  are able to compute some common secret component. Such a component can be expressed as a shared session secret key. We will show how to do this using the example of the Schnorr protocol. Let&#8217;s denote the cryptographic hash function as <\/p>\n<p>Let&#8217;s make some changes to the protocol. Let&#8217;s use the following trick: we&#8217;ll &#171;hide&#187; the ephemeris  at a point on the curve. This causes  also turn into a point. As a result, we get the following protocol.<\/p>\n<p><em>Protocol messages.<\/em><\/p>\n<p>1. \u00a0 <\/p>\n<p>2. \u00a0 <\/p>\n<p>3. \u00a0 <\/p>\n<p><em>The actions of the parties.<\/em><\/p>\n<p> demonstrates to  that he posesses (knows)  In order to achieve this, the subsequent actions are executed:<\/p>\n<p>1. \u00a0  selects  computes  verifies the condition  If  then it chooses a new  and repeats all the necessary computations and checks;<\/p>\n<p>2. \u00a0  reads an actual certificate  and checks the DS  where  is the trusted party&#8217;s public key  If  then the session ends. If  then it selects  and computes  (). If  then it selects a new  and repeats all the necessary computations and checks;<\/p>\n<p>3. \u00a0  checks the condition  if it is true, then it computes  ), otherwise the session ends;<\/p>\n<p>4. \u00a0  computes  Then it checks  If equal then the proof is accepted, and rejected otherwise.<\/p>\n<p>So, suppose that the identification step was successful and  accepted the proof provided by <\/p>\n<p>At this point,  has the following set of data:  ( by construction),  (received from  as a ).  knows  (received from  as a ),  (by construction),  (received from  as a ).<\/p>\n<p>The parties independently compute a shared session secret key in accordance with the following rules:<\/p>\n<ol>\n<li>\n<p> \u00a0 computes  <\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p> \u00a0  computes  <\/p>\n<\/li>\n<\/ol>\n<p>Obviously,  due to commutativity. Therefore,  As for the IDS, then:<\/p>\n<p>1. \u00a0  generates a signature for the given message  using  given the value of the hash function <\/p>\n<p>2. \u00a0  checks the signature for some message  using  given the hash function value <\/p>\n<p>The advantage of the above mentioned solution is that the changes relate to arithmetic operations and do not affect the logic of the protocol. This is an important circumstance, since any fundamental modifications would lead to the need to study the cryptographic strength of the new design with all the ensuing consequences.<\/p>\n<p>Earlier, we noted that we have a protocol with similar functionality that solves this problem, but at the same time allows us to recognize that the prover belongs to a certain local community of registered participants.<\/p>\n<p><strong>Preliminary analysis<\/strong><\/p>\n<p>Let&#8217;s note that  are only known to  and  respectively. Then an attacker can get  or  by finding an ECDLP solution given  or  respectively. It is also possible to find a DLP solution if  or  The purpose of the  function, as well as the relationship between ECDLP and DLP, is explained in <a href=\"https:\/\/mega.nz\/file\/hWpSHQIC#EeoLF6XCGjbS0jItr1_xrOTeoFfa7Rv3H1ZCwaODSW8\" rel=\"noopener noreferrer nofollow\"><u>Appendix A<\/u><\/a>. Since  only someone who knows  or  as well as the secret key of an arbitrary DS scheme chosen for this goal is able to generate the IDS.<\/p>\n<p>An active attacker, using interception and blocking techniques, is able to impose  instead of   instead of  and  instead of  when  For example, these may be messages from another session. However,  will overwhelmingly reject the provided proof, since  and  with negligible probability. In addition,   and  with negligible probability.<\/p>\n<p><strong>The amount of information transmitted<\/strong><\/p>\n<p>We will use the compact curve point representation [Cohen_etc._2006] (section 13.2.5).<\/p>\n<p>The point  is given by a pair of coordinates  If  belongs to the curve, then the equation  is true for some  This equation can be interpreted as  where  is a quadratic residue and then there are only two solutions  For  the solution is  If  is even, then  is odd, and vice versa. In the general case, of two solutions, one is always even and the other is odd.<\/p>\n<p>Let the point  be represented by the coordinate  We will transmit over the communication channel  where  is a binary variable that allows us to determine the desired solution from a pair of possible ones. Let&#8217;s make it a rule that  means even, and  means odd. For example, for  one should get a pair  and then choose an odd solution from this pair.<\/p>\n<p> bits of memory is required to store an arbitrary point on the curve. In  the square root is computed using the Tonelli-Shanks algorithm of asymptotic computational complexity  [Cohen_etc._2006] (section 11.1.5).<\/p>\n<p>Then, to restore the  point, it&#8217;s necessary to perform the following actions:<\/p>\n<p>1. \u00a0 For a given coordinate  a certain coordinate  is computed using the Tonelli-Shanks algorithm.<\/p>\n<p>2. \u00a0 If  then <\/p>\n<p>3. \u00a0 If  then <\/p>\n<p>4. \u00a0 If  then <\/p>\n<p>5. \u00a0 If  then <\/p>\n<p>If the compact representation is used, then  bits would need to be transmitted to deliver   and  in total. For comparison, in the original Schnorr protocol, under the same conditions, for the delivery of  and  in total, it is necessary to send  bits.<\/p>\n<p><strong>Computation optimization<\/strong><\/p>\n<p>The complexity depends on the methods for computing the scalar multiplication, as well as the choice of the computing platform. Thus, for example, tests that were carried out using a test bench implemented in the Scala v2.13.6 programming language on a MacBook Pro (15-inch, 2016) hardware platform with a 4-core Intel Core i7 processor running macOS Monterey version 12.6.2 using primitives from the <a href=\"https:\/\/crypto.stanford.edu\/pbc\/\" rel=\"noopener noreferrer nofollow\"><u>PBC library<\/u><\/a> show that due to the preprocessing possible for the constant  the scalar product  is on average 85.37% more efficient than the scalar products  where  The measurement results are summarized in Table 1.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>IDS mode and public key certificates<\/strong><\/p>\n<p> owns the key pair  A corresponding certificate is issued for the public key  The following question needs to be answered: what benefit can be gained from the IDS mode with a public key certificate?<\/p>\n<p>Let the certificate  be issued for the public key  where  \u2014 DS of trusted party   \u2014 personal data of  and  \u2014 secret key of  intended for generating the certificate&#8217;s DS.<\/p>\n<p>Let&#8217;s set up a thought experiment and, in the absence of the DS mode, assume that  sends  some digitally certified personal data  Furthermore,  claims that  is his own personal data. It should be noted right away that this data could have been obtained in various ways, for example, as a result of collusion, the use of social engineering methods, or simply copied from publicly available long-term memory. To verify the digital signature,  must use the public key  from the certificate  Let&#8217;s also assume that all necessary checks have confirmed the authenticity and integrity of <\/p>\n<p>As a result,  has two certificates  and  each issued by a trusted CA. Consider the case when  is treated uniquely). As a result,  is unable to make a correct choice about  or  because there is no decision criterion. Obviously, such uncertainty is unacceptable.<\/p>\n<p>If the IDS mode is enabled, then when making a decision about  or   relies on the proof that was provided to  at the identification stage.  reasons using the following logic.<\/p>\n<p>A DS for personal data can only be generated by someone who simultaneously has access to the variables of a separate identification protocol session, both public and secret, including the secret key for generating a DS.<\/p>\n<p>Let&#8217;s assume that the digital signature was obtained as a result of collusion. To do this, an attacker must force the owner of personal data to certify this data with his DS, but with the inclusion of some auxiliary data, about which the certifier does not know anything. Based on the associated risk model, such an event seems implausible. It is overwhelmingly likely that the witness will refuse to include such data fearing undesirable consequences, such as implicit debt imposition, blacklisting, account blocking, and so on.<\/p>\n<p><strong>Open verification in the Schnorr protocol<\/strong><\/p>\n<p>The peculiarity of the Schnorr protocol is that anyone with access to the variables  and  can verify the correctness of the evaluation made by  towards the proof given by <\/p>\n<p>Indeed, the variables mentioned above are transmitted over an insecure communication channel and, therefore, are publicly available. Since anyone can use the public key  it is not necessary to have  authority to compute  and then check <\/p>\n<p>The practical meaning here is the ability to control the actions of both  and  This is important in the case when disagreements may arise. For example, when  claims to have provided the correct proof, but  denies it.<\/p>\n<p><strong>Summary<\/strong><\/p>\n<p>Estimates of the amount of transmitted information for the original Schnorr protocol and the modification described above differ insignificantly.<\/p>\n<p>The original Schnorr protocol uses three scalar multiplications, while the modification of the protocol uses four such multiplications. Since the scalar multiplications  and  are computed using the generating element  the optimization is possible. This optimization allows to reduce computational complexity in exchange for the allocation of additional memory for storing intermediate results (see Table 1). Note that in the original protocol, when computing the point  only partial optimization is allowed. However, in the modified protocol, when computing the points  and  as well as the scalar multiplications  and  such optimization is impossible.<\/p>\n<p>In the proposed modification of the protocol, open verification is not feasible.<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>It should be attested that we were able to solve the problem for a particular protocol in a<\/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-381509","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/381509","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=381509"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/381509\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=381509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=381509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=381509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}