{"id":50,"date":"2023-07-27T10:32:25","date_gmt":"2023-07-27T10:32:25","guid":{"rendered":"https:\/\/raccoonfamily.org\/?page_id=50"},"modified":"2023-07-29T11:28:54","modified_gmt":"2023-07-29T11:28:54","slug":"raccoon-%f0%9f%a6%9d","status":"publish","type":"page","link":"https:\/\/raccoonfamily.org\/","title":{"rendered":"Raccoon"},"content":{"rendered":"<h2 id=\"introduction\">Introduction<\/h2>\n<p><strong>Raccoon<\/strong> is a digital signature scheme submitted to the NIST <a href=\"https:\/\/csrc.nist.gov\/projects\/pqc-dig-sig\/standardization\/call-for-proposals\">Call for Additional Post-Quantum Signature Schemes<\/a> proposed by the <a href=\"https:\/\/raccoonfamily.org\/?page_id=31\">Raccoon Team<\/a>.<br \/>\nThe authors can be contacted by email at <code>authors [at] raccoonfamily [dot] org<\/code>.<\/p>\n<p>The Raccoon signature scheme is based on the Fiat-Shamir transform from a Schnorr lattice-based signature with a fine-tuned analysis to prevent the use of the rejection-sampling method and Gaussian sampling, enabling the use of masking techniques \u2014a countermeasure against side-channel attacks\u2014 on the secret keys during the signature algorithm.<\/p>\n<p>Furthermore, the security of Raccoon relies on standard assumptions on module lattices, which are the same one used in the (selected) standard Dilithium. These assumptions are well studied since a decade and have shown to be robust while offering fair parameter size.<\/p>\n<h2 id=\"highlights\">Highlights<\/h2>\n<p>The <strong>Raccoon<\/strong> signature scheme has been designed to ensure the ease of implementation as well as<\/p>\n<ul>\n<li><strong>Masking.<\/strong> The main design of Raccoon makes it possible to enable the use of efficient masking techniques. Raccoon can be masked with a quasi-linear overhead with respect to the masking order. This allows masking at high orders with a small impact on efficiency.<\/li>\n<li><strong>Standard lattice assumptions.<\/strong> The security of Raccoon relies on (variants) of lattice assumptions that are well-understood. Namely, these assumptions are Module-LWE and Module-SIS similarly to the primary standard Dilithium.<\/li>\n<li><strong>Simple and portable implementations.<\/strong> The design of Raccoon relies on two points to ease the implementation on a wide range of platforms. First, the error distribution is a sum of uniforms, thus avoiding the implementation of Gaussian sampling. Then, the selected 49-bit modulus splits into a 24 and 25-bit moduli, which facilitates implementations on 32-bit architecture.<\/li>\n<\/ul>\n<h2 id=\"performances\">Performances<\/h2>\n<table>\n<caption>Key sizes for the different parameter levels with a number of shares\u202f<em>d<\/em> = 1 (no masking) and <em>d<\/em> = 32.<\/caption>\n<colgroup>\n<col style=\"width: 16%;\" \/>\n<col style=\"width: 16%;\" \/>\n<col style=\"width: 26%;\" \/>\n<col style=\"width: 21%;\" \/>\n<col style=\"width: 18%;\" \/> <\/colgroup>\n<thead>\n<tr class=\"header\">\n<th>Parameter level<\/th>\n<th>Shares<\/th>\n<th>Verification key size (kB)<\/th>\n<th>Signing key size (kB)<\/th>\n<th>Signature size (kB)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>1<\/td>\n<td>1<\/td>\n<td>2.256<\/td>\n<td>14.800<\/td>\n<td>11.524<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>1<\/td>\n<td>32<\/td>\n<td>2.256<\/td>\n<td>15.296<\/td>\n<td>11.524<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>3<\/td>\n<td>1<\/td>\n<td>3.160<\/td>\n<td>18.840<\/td>\n<td>14.544<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>3<\/td>\n<td>32<\/td>\n<td>3.160<\/td>\n<td>19.584<\/td>\n<td>14.544<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>5<\/td>\n<td>1<\/td>\n<td>4.064<\/td>\n<td>26.016<\/td>\n<td>20.330<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>5<\/td>\n<td>32<\/td>\n<td>4.064<\/td>\n<td>27.008<\/td>\n<td>20.330<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 93%;\">\n<caption>Timing of the <a href=\"https:\/\/github.com\/masksign\/raccoon\">reference implementation<\/a> runnning on a desktop computer with an Intel i7-12700 CPU running at 2.1GHz.<\/caption>\n<colgroup>\n<col style=\"width: 22%;\" \/>\n<col style=\"width: 23%;\" \/>\n<col style=\"width: 16%;\" \/>\n<col style=\"width: 13%;\" \/>\n<col style=\"width: 16%;\" \/> <\/colgroup>\n<thead>\n<tr class=\"header\">\n<th>Parameter level<\/th>\n<th>Shares<\/th>\n<th>Keygen (ms)<\/th>\n<th>Sign (ms)<\/th>\n<th>Verify (ms)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>1<\/td>\n<td>1<\/td>\n<td>1.000<\/td>\n<td>2.281<\/td>\n<td>0.832<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>1<\/td>\n<td>32<\/td>\n<td>19.829<\/td>\n<td>35.104<\/td>\n<td>0.832<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>3<\/td>\n<td>1<\/td>\n<td>1.540<\/td>\n<td>3.248<\/td>\n<td>1.309<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>3<\/td>\n<td>32<\/td>\n<td>26.451<\/td>\n<td>46.867<\/td>\n<td>1.309<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>5<\/td>\n<td>1<\/td>\n<td>2.462<\/td>\n<td>4.764<\/td>\n<td>2.156<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>5<\/td>\n<td>32<\/td>\n<td>36.587<\/td>\n<td>63.972<\/td>\n<td>2.156<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table style=\"width: 93%;\">\n<caption>Memory consumption of the <a href=\"https:\/\/github.com\/masksign\/raccoon\">reference implementation<\/a> (stack usage).<\/caption>\n<colgroup>\n<col style=\"width: 22%;\" \/>\n<col style=\"width: 23%;\" \/>\n<col style=\"width: 16%;\" \/>\n<col style=\"width: 13%;\" \/>\n<col style=\"width: 16%;\" \/> <\/colgroup>\n<thead>\n<tr class=\"header\">\n<th>Parameter level<\/th>\n<th>Shares<\/th>\n<th>Keygen (kB)<\/th>\n<th>Sign (kB)<\/th>\n<th>Verify (kB)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>1<\/td>\n<td>1<\/td>\n<td>24.784<\/td>\n<td>155.952<\/td>\n<td>53.488<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>1<\/td>\n<td>32<\/td>\n<td>283.360<\/td>\n<td>922.480<\/td>\n<td>53.488<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>3<\/td>\n<td>1<\/td>\n<td>28.896<\/td>\n<td>233.808<\/td>\n<td>65.776<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>3<\/td>\n<td>32<\/td>\n<td>287.472<\/td>\n<td>1127.296<\/td>\n<td>65.776<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>5<\/td>\n<td>1<\/td>\n<td>37.088<\/td>\n<td>373.072<\/td>\n<td>82.176<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>5<\/td>\n<td>32<\/td>\n<td>295.664<\/td>\n<td>1520.512<\/td>\n<td>82.176<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<figure><center><br \/>\n<a href=\"https:\/\/github.com\/masksign\/raccoon\">Reference implementation<\/a> running time in millisecond (scale on the left side) and stack usage in kilobytes (scale on the right side) as functions of the number of shares <em>d<\/em> for Keygen and Sign, for NIST levels I, III and V.<\/center><br \/>\n<script type=\"text\/javascript\" src=\"https:\/\/www.gstatic.com\/charts\/loader.js\"><\/script>\r\n<script type=\"text\/javascript\">\r\n\tgoogle.charts.load('current', {'packages':['corechart']});\r\n\tgoogle.charts.setOnLoadCallback(drawKeygenI);\r\n\tgoogle.charts.setOnLoadCallback(drawSignI);\r\n\tgoogle.charts.setOnLoadCallback(drawKeygenIII);\r\n\tgoogle.charts.setOnLoadCallback(drawSignIII);\r\n\tgoogle.charts.setOnLoadCallback(drawKeygenV);\r\n\tgoogle.charts.setOnLoadCallback(drawSignV);\r\n\r\n\tvar options = {\r\n\t\ttitle: 'Keygen (NIST Level I)',\r\n\t\tbackgroundColor: '#EBE8E6',\r\n\t\tcurveType: 'none',\r\n\t\tlegend: { position: 'top' },\r\n\t\tpointVisible: true,\r\n\t\theight: 350,\r\n\t\tseries: {\r\n\t\t\t0: {\r\n\t\t\t\ttargetAxisIndex: 0,\r\n\t\t\t\tpointShape:'circle',\r\n\t\t\t\tpointSize: 10,\r\n\t\t\t},\r\n\t\t\t1: {\r\n\t\t\t\ttargetAxisIndex: 1,\r\n\t\t\t\tpointShape:'diamond',\r\n\t\t\t\tpointSize: 10,\r\n\t\t\t},\r\n\t\t},\r\n\t\tvAxes: {\r\n\t\t\t1: {\r\n\t\t\t\t\/\/ title: 'Memory (kB)',\r\n\t\t\t\ttextStyle: {color: '#DC3912'},\r\n\t\t\t\ttitleTextStyle: {color: '#DC3912'},\r\n\t\t\t\tformat: '#,##0 kB',\r\n\t\t\t},\r\n\t\t\t0: {\r\n\t\t\t\t\/\/ title: 'Timing (ms)',\r\n\t\t\t\ttextStyle: {color: '#3366CC'},\r\n\t\t\t\ttitleTextStyle: {color: '#3366CC'},\r\n\t\t\t\tformat: '#,##0 ms',\r\n\t\t\t},\r\n\t\t},\r\n\t\tvAxis : { gridlines: { count: 0 } },\r\n\t\thAxis: {\r\n\t\t\ttitle: 'Shares',\r\n\t\t\tgridlines: { count:0 },\r\n\t\t\tticks: [1,2,4,8,16,32],\r\n\t\t}\r\n\t};\r\n\r\n\tfunction drawKeygenI() {\r\n\t\tvar keygenI = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1 ,                1.000,   24.784 ],\r\n\t\t\t[2 ,                1.242,   24.800 ],\r\n\t\t\t[4 ,                1.646,   33.040 ],\r\n\t\t\t[8 ,                4.457,   49.472 ],\r\n\t\t\t[16,                6.156,   152.048],\r\n\t\t\t[32,                19.829,  283.360]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('keygen_I'));\r\n\t\toptions.title = 'Keygen (NIST Level I)';\r\n\r\n\t\tchart.draw(keygenI, options);\r\n\t}\r\n\r\n\tfunction drawSignI() {\r\n\t\tvar signI = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1,                   2.281,     155.952],\r\n\t\t\t[2,                   2.563,     180.560],\r\n\t\t\t[4,                   3.061,     229.776],\r\n\t\t\t[8,                   8.361,     328.144],\r\n\t\t\t[16,                  10.695,    529.008],\r\n\t\t\t[32,                  35.104,    922.480]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('sign_I'));\r\n\t\toptions.title = 'Sign (NIST Level I)';\r\n\r\n\t\tchart.draw(signI, options);\r\n\t}\r\n\r\n\tfunction drawKeygenIII() {\r\n\t\tvar keygenIII = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1 ,                  1.540,     28.896],\r\n\t\t\t[2 ,                  1.872,     28.928],\r\n\t\t\t[4 ,                  2.415,     37.152],\r\n\t\t\t[8 ,                  6.282,     53.600],\r\n\t\t\t[16,                  8.542,     156.160],\r\n\t\t\t[32,                  26.451,    287.472]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('keygen_III'));\r\n\t\toptions.title = 'Keygen (NIST Level III)';\r\n\r\n\t\tchart.draw(keygenIII, options);\r\n\t}\r\n\r\n\tfunction drawSignIII() {\r\n\t\tvar signIII = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1,                   3.248,     233.808                  ],\r\n\t\t\t[2,                   3.644,     262.512                  ],\r\n\t\t\t[4,                   4.292,     319.904                  ],\r\n\t\t\t[8,                   11.410,    434.672                  ],\r\n\t\t\t[16,                  14.476,    668.288                  ],\r\n\t\t\t[32,                  46.867,    1127.296                 ]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('sign_III'));\r\n\t\toptions.title = 'Sign (NIST Level III)';\r\n\r\n\t\tchart.draw(signIII, options);\r\n\t}\r\n\tfunction drawKeygenV() {\r\n\t\tvar keygenV = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1 ,                  2.462 ,    37.088],\r\n\t\t\t[2 ,                  2.926 ,    37.120],\r\n\t\t\t[4 ,                  3.699 ,    45.344],\r\n\t\t\t[8 ,                  8.870 ,    61.792],\r\n\t\t\t[16,                  12.149,   164.352],\r\n\t\t\t[32,                  36.587,   295.664]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('keygen_V'));\r\n\t\toptions.title = 'Keygen (NIST Level V)';\r\n\r\n\t\tchart.draw(keygenV, options);\r\n\t}\r\n\r\n\tfunction drawSignV() {\r\n\t\tvar signV = google.visualization.arrayToDataTable([\r\n\t\t\t['Shares',  'Timing (ms)',  'Memory (kB)'],\r\n\t\t\t[1,                   4.764  ,   373.072 ],\r\n\t\t\t[2,                   5.266  ,   409.968 ],\r\n\t\t\t[4,                   6.238  ,   483.744 ],\r\n\t\t\t[8,                   15.830 ,   631.280 ],\r\n\t\t\t[16,                  20.233 ,   930.432 ],\r\n\t\t\t[32,                  63.972 ,   1520.512]\r\n\t\t]);\r\n\r\n\t\tvar chart = new google.visualization.LineChart(document.getElementById('sign_V'));\r\n\t\toptions.title = 'Sign (NIST Level V)';\r\n\r\n\t\tchart.draw(signV, options);\r\n\t}\r\n<\/script>\r\n\r\n<div id=\"keygen_I\"><\/div>\r\n<div id=\"sign_I\"><\/div>\r\n<div id=\"keygen_III\"><\/div>\r\n<div id=\"sign_III\"><\/div>\r\n<div id=\"keygen_V\"><\/div>\r\n<div id=\"sign_V\"><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Raccoon is a digital signature scheme submitted to the NIST Call for Additional Post-Quantum Signature Schemes proposed by the Raccoon Team. The authors can be contacted by email at authors [at] raccoonfamily [dot] org. The Raccoon signature scheme is based on the Fiat-Shamir transform from a Schnorr lattice-based signature with a fine-tuned analysis to [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-50","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/pages\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=50"}],"version-history":[{"count":74,"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/pages\/50\/revisions"}],"predecessor-version":[{"id":183,"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=\/wp\/v2\/pages\/50\/revisions\/183"}],"wp:attachment":[{"href":"https:\/\/raccoonfamily.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}