

{"id":68,"date":"2021-06-14T20:22:39","date_gmt":"2021-06-14T18:22:39","guid":{"rendered":"https:\/\/project.inria.fr\/espdms\/?page_id=68"},"modified":"2022-04-01T11:07:20","modified_gmt":"2022-04-01T09:07:20","slug":"game1","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/espdms\/game1\/","title":{"rendered":"Game 1 &#8211; Malicious User"},"content":{"rendered":"\n<div>In this game, the PDMS user tries to interfere with the computation of the number of bike trips in order to get the maximum benefit. Initially, the genuine GPS data of the user are already collected and stored inside the PDMS. If computed by the correct code, they would account for 22\/60 bike trips between home and work. \nIn the following versions of the PDMS, two properties are either disabled or enabled:\n<ul>\n<li> End-to-end access control: When this property is enabled, the Core enforces access control of the stored data.\n<li> Secure communications (authenticity): When this property is enabled, the Core verifies that the identity of the Data Tasks matches the ones in the Manifest file previously sent by the Employer and approved by the PDMS user.\n<\/ul><\/div>\n<hr>\n<table class=\"wp-block-table\">\n<tbody>\n<tr>\n<td width=\"400\">\n<h2><strong>PDMS version&nbsp;<\/strong><\/h2>\n<ul>\n<li>End-to-end access control:<strong> <span style=\"color: #008000;\">YES <\/span><\/strong><\/li>\n<li>Secure communications (authenticity):<strong> <span style=\"color: #008000;\">YES<\/span><\/strong><\/li>\n<\/ul>\n<hr>\nBefore the computation, the user sends a data modification request to the Core.\nWhat will happen during the computation ? Enter your guess on the right&nbsp; <span style=\"color: #ff0000;\"><strong>\u21d2<\/strong><strong>\u21d2<\/strong><strong>\u21d2<\/strong><\/span>\n<\/td>\n<td width=\"700\" height=\"410\" bgcolor=\"#2f4f4f\"><span style=\"color: #ffff99;\"><p id=\"Cons1\" class=\"p3\">&#8212; waiting for input &#8212;<\/p><\/span><\/td>\n<td width=\"50\">&nbsp;<\/td>\n<td width=\"500\"><div class=\"frm_forms  with_frm_style frm_style_formidable-style\" id=\"frm_form_3_container\" ><form enctype=\"multipart\/form-data\" method=\"post\" class=\"frm-show-form  frm_js_validate \" id=\"form_game1_form\" ><div class=\"frm_form_fields \"><fieldset><div class=\"frm_fields_container\"><input type=\"hidden\" name=\"frm_action\" value=\"create\" \/><input type=\"hidden\" name=\"form_id\" value=\"3\" \/><input type=\"hidden\" name=\"frm_hide_fields_3\" id=\"frm_hide_fields_3\" value=\"\" \/><input type=\"hidden\" name=\"form_key\" value=\"game1_form\" \/><input type=\"hidden\" name=\"item_meta[0]\" value=\"\" \/><input type=\"hidden\" id=\"frm_submit_entry_3\" name=\"frm_submit_entry_3\" value=\"b8b402fd39\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/espdms\/wp-json\/wp\/v2\/pages\/68\" \/><div id=\"frm_field_9_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm_half vertical_radio\"><div  id=\"field_li0n2_label\" class=\"frm_primary_label\">Ecological bonus considered:<span class=\"frm_required\">*<\/span><\/div><div class=\"frm_opt_container\" aria-labelledby=\"field_li0n2_label\" role=\"radiogroup\" aria-required=\"true\"><div class=\"frm_radio\" id=\"frm_radio_9-0\"><label  for=\"field_li0n2-0\"><input type=\"radio\" name=\"item_meta[9]\" id=\"field_li0n2-0\" value=\"0 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 0 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_9-1\"><label  for=\"field_li0n2-1\"><input type=\"radio\" name=\"item_meta[9]\" id=\"field_li0n2-1\" value=\"22 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 22 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_9-2\"><label  for=\"field_li0n2-2\"><input type=\"radio\" name=\"item_meta[9]\" id=\"field_li0n2-2\" value=\"60 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 60 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_9-3\"><label  for=\"field_li0n2-3\"><input type=\"radio\" name=\"item_meta[9]\" id=\"field_li0n2-3\" value=\"other\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> other<\/label><\/div><\/div><\/div><input type=\"hidden\" name=\"item_key\" value=\"\" \/><div id=\"frm_field_32_container\"><label for=\"field_ywf4c\" >If you are human, leave this field blank.<\/label><input  id=\"field_ywf4c\" type=\"text\" class=\"frm_form_field form-field frm_verify\" name=\"item_meta[32]\" value=\"\"  \/><\/div><input name=\"frm_state\" type=\"hidden\" value=\"QDrhT++GVKxSH2ZRVrv94to+wSRIUO31XoP4c6RR8KM=\" \/><div class=\"frm_submit\"><button class=\"frm_button_submit\" type=\"submit\"  >Check your guess!<\/button><\/div><\/div><\/fieldset><\/div><\/form><\/div><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n<table class=\"wp-block-table\">\n<tbody>\n<tr>\n<td width=\"400\">\n<h2><strong>PDMS version&nbsp;<\/strong><\/h2>\n<ul>\n<li>End-to-end access control:<strong> <span style=\"color: #ff0000;\">NO <\/span><\/strong><\/li>\n<li>Secure communications (authenticity):<strong> <span style=\"color: #008000;\">YES<\/span><\/strong><\/li>\n<\/ul>\n<hr>\nBefore the computation, the user sends a data modification request to the Core.\nWhat will happen during the computation ? Enter your guess on the right&nbsp; <span style=\"color: #ff0000;\"><strong>\u21d2<\/strong><strong>\u21d2<\/strong><strong>\u21d2<\/strong><\/span>\n<\/td>\n<td width=\"700\" height=\"410\" bgcolor=\"#2f4f4f\"><span style=\"color: #ffff99;\"><p id=\"Cons2\" class=\"p3\">&#8212; waiting for input &#8212;<\/p><\/span><\/td>\n<td width=\"50\">&nbsp;<\/td>\n<td width=\"500\"><div class=\"frm_forms  with_frm_style frm_style_formidable-style\" id=\"frm_form_4_container\" ><form enctype=\"multipart\/form-data\" method=\"post\" class=\"frm-show-form  frm_js_validate \" id=\"form_game1_form8c6eda5862\" ><div class=\"frm_form_fields \"><fieldset><div class=\"frm_fields_container\"><input type=\"hidden\" name=\"frm_action\" value=\"create\" \/><input type=\"hidden\" name=\"form_id\" value=\"4\" \/><input type=\"hidden\" name=\"frm_hide_fields_4\" id=\"frm_hide_fields_4\" value=\"\" \/><input type=\"hidden\" name=\"form_key\" value=\"game1_form8c6eda5862\" \/><input type=\"hidden\" name=\"item_meta[0]\" value=\"\" \/><input type=\"hidden\" id=\"frm_submit_entry_4\" name=\"frm_submit_entry_4\" value=\"b8b402fd39\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/espdms\/wp-json\/wp\/v2\/pages\/68\" \/><div id=\"frm_field_12_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm_half vertical_radio\"><div  id=\"field_li0n_label\" class=\"frm_primary_label\">Ecological bonus considered:<span class=\"frm_required\">*<\/span><\/div><div class=\"frm_opt_container\" aria-labelledby=\"field_li0n_label\" role=\"radiogroup\" aria-required=\"true\"><div class=\"frm_radio\" id=\"frm_radio_12-0\"><label  for=\"field_li0n-0\"><input type=\"radio\" name=\"item_meta[12]\" id=\"field_li0n-0\" value=\"0 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 0 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_12-1\"><label  for=\"field_li0n-1\"><input type=\"radio\" name=\"item_meta[12]\" id=\"field_li0n-1\" value=\"22 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 22 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_12-2\"><label  for=\"field_li0n-2\"><input type=\"radio\" name=\"item_meta[12]\" id=\"field_li0n-2\" value=\"60 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 60 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_12-3\"><label  for=\"field_li0n-3\"><input type=\"radio\" name=\"item_meta[12]\" id=\"field_li0n-3\" value=\"other\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> other<\/label><\/div><\/div><\/div><input type=\"hidden\" name=\"item_key\" value=\"\" \/><div id=\"frm_field_33_container\"><label for=\"field_yx39d\" >If you are human, leave this field blank.<\/label><input  id=\"field_yx39d\" type=\"text\" class=\"frm_form_field form-field frm_verify\" name=\"item_meta[33]\" value=\"\"  \/><\/div><input name=\"frm_state\" type=\"hidden\" value=\"QDrhT++GVKxSH2ZRVrv94sWcKkJkBx\/CY8daXE\/UGUY=\" \/><div class=\"frm_submit\"><button class=\"frm_button_submit\" type=\"submit\"  >Check your guess!<\/button><\/div><\/div><\/fieldset><\/div><\/form><\/div><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n<table class=\"wp-block-table\">\n<tbody>\n<tr>\n<td width=\"400\">\n<h2><strong>PDMS version&nbsp;<\/strong><\/h2>\n<ul>\n<li>End-to-end access control:<strong> <span style=\"color: #008000;\">YES <\/span><\/strong><\/li>\n<li>Secure communications (authenticity):<strong> <span style=\"color: #ff0000;\">NO<\/span><\/strong><\/li>\n<\/ul>\n<hr>\nThe user tries a <span style=\"font-weight: bold;\">different<\/span> kind of attack. They do not modify the data stored by the PDMS. Instead, they code a program and launch it when the Core requests the launch of the ComputeBikeStats data task.\nWhat will happen during the computation ? Enter your guess on the right&nbsp; <span style=\"color: #ff0000;\"><strong>\u21d2<\/strong><strong>\u21d2<\/strong><strong>\u21d2<\/strong><\/span>\n<br><br><br><br><br>\n<\/td>\n<td width=\"700\" height=\"320\" bgcolor=\"#2f4f4f\"><span style=\"color: #ffff99;\"><p id=\"Cons3\" class=\"p3\">&#8212; waiting for input &#8212;<\/p><\/span><\/td>\n<td width=\"50\">&nbsp;<\/td>\n<td width=\"500\"><div class=\"frm_forms  with_frm_style frm_style_formidable-style\" id=\"frm_form_5_container\" ><form enctype=\"multipart\/form-data\" method=\"post\" class=\"frm-show-form  frm_js_validate \" id=\"form_game1_form8c6eda5862a79f57598e\" ><div class=\"frm_form_fields \"><fieldset><div class=\"frm_fields_container\"><input type=\"hidden\" name=\"frm_action\" value=\"create\" \/><input type=\"hidden\" name=\"form_id\" value=\"5\" \/><input type=\"hidden\" name=\"frm_hide_fields_5\" id=\"frm_hide_fields_5\" value=\"\" \/><input type=\"hidden\" name=\"form_key\" value=\"game1_form8c6eda5862a79f57598e\" \/><input type=\"hidden\" name=\"item_meta[0]\" value=\"\" \/><input type=\"hidden\" id=\"frm_submit_entry_5\" name=\"frm_submit_entry_5\" value=\"b8b402fd39\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/espdms\/wp-json\/wp\/v2\/pages\/68\" \/><div id=\"frm_field_14_container\" class=\"frm_form_field form-field  frm_required_field frm_top_container frm_half vertical_radio\"><div  id=\"field_li0n9c6aa1d9b3_label\" class=\"frm_primary_label\">Ecological bonus considered:<span class=\"frm_required\">*<\/span><\/div><div class=\"frm_opt_container\" aria-labelledby=\"field_li0n9c6aa1d9b3_label\" role=\"radiogroup\" aria-required=\"true\"><div class=\"frm_radio\" id=\"frm_radio_14-0\"><label  for=\"field_li0n9c6aa1d9b3-0\"><input type=\"radio\" name=\"item_meta[14]\" id=\"field_li0n9c6aa1d9b3-0\" value=\"0 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 0 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_14-1\"><label  for=\"field_li0n9c6aa1d9b3-1\"><input type=\"radio\" name=\"item_meta[14]\" id=\"field_li0n9c6aa1d9b3-1\" value=\"22 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 22 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_14-2\"><label  for=\"field_li0n9c6aa1d9b3-2\"><input type=\"radio\" name=\"item_meta[14]\" id=\"field_li0n9c6aa1d9b3-2\" value=\"60 bike trips\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> 60 bike trips<\/label><\/div><div class=\"frm_radio\" id=\"frm_radio_14-3\"><label  for=\"field_li0n9c6aa1d9b3-3\"><input type=\"radio\" name=\"item_meta[14]\" id=\"field_li0n9c6aa1d9b3-3\" value=\"other\"   data-reqmsg=\"Ecological bonus considered: cannot be blank.\" data-invmsg=\"Ecological bonus considered: is invalid\"  \/> other<\/label><\/div><\/div><\/div><input type=\"hidden\" name=\"item_key\" value=\"\" \/><div id=\"frm_field_34_container\"><label for=\"field_d49cd\" >If you are human, leave this field blank.<\/label><input  id=\"field_d49cd\" type=\"text\" class=\"frm_form_field form-field frm_verify\" name=\"item_meta[34]\" value=\"\"  \/><\/div><input name=\"frm_state\" type=\"hidden\" value=\"QDrhT++GVKxSH2ZRVrv94ozrSZKlleNdFR8FLK1OhjA=\" \/><div class=\"frm_submit\"><button class=\"frm_button_submit\" type=\"submit\"  >Check your guess!<\/button><\/div><\/div><\/fieldset><\/div><\/form><\/div><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n\n<pre><script>\nfunction sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\nconst months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst today = new Date();\nconst currentMonth = today.getMonth();\nconst lastMonth = currentMonth == 0 ? 11 : currentMonth - 1;\nconst monthNumber = lastMonth+1 >= 10 ? lastMonth+1 : \"0\" + (lastMonth + 1)\nconst lastMonthStart = today.getFullYear() + \"-\" + monthNumber + \"-01\";\nconst lastMonthEnd = today.getFullYear() + \"-\" + monthNumber + \"-\" + months[lastMonth];\nasync function attack1() {\n    var x = document.getElementById(\"Cons1\");\n    x.innerHTML = \"running gps_cheat.sh\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 0 records from week 1 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 0 records from week 2 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 0 records from week 3 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 0 records from week 4 updated\";\n    await sleep(2000);\n    x.innerHTML += \"<br>...APP: sending execution request: ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Received execution request: ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Gathering GPS data from \"+ lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(2000);\n    x.innerHTML += \"<br>...CORE: Requesting launch of the ComputeBikeStats data task\";\n    await sleep(500);\n    x.innerHTML += \"<br>...OS: Data task is online on port 65254\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Establishing local attestation with ComputeBikeStats data task on port 65254\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Data task's identity matches Manifest\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Sending data to ComputeBikeStats data task\";\n    await sleep(3000);\n    x.innerHTML += \" --> Number of computed bike trips: 22\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: sending the result to APP\";\n    await sleep(500);\n    x.innerHTML += \"<br>...APP: receiving result from Core\";\n    await sleep(1000);\n    x.innerHTML += \"<br>...APP: Result received, acknowledging 22 bike trips<br>------------- Finished -------------\";\n}\n    \n    async function attack2() {\n    var x = document.getElementById(\"Cons2\");\n    x.innerHTML = \"running gps_cheat.sh\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 120 records from week 1 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 110 records from week 2 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 123 records from week 3 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 105 records from week 4 updated\";\n    await sleep(1000);\n    x.innerHTML += \"<br>...APP: sending execution request : ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Received execution request: ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Gathering GPS data from \"+ lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(1000);\n    x.innerHTML += \"<br>...CORE: Requesting launch of the ComputeBikeStats data task\";\n    await sleep(500);\n    x.innerHTML += \"<br>...HOST: Data task is online on port 65254\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Establishing local attestation with ComputeBikeStats data task on port 65254\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Data task's identity matches Manifest\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Sending data to ComputeBikeStats data task\";\n    await sleep(3000);\n    x.innerHTML += \" --> Number of computed bike trips: 60\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: sending the result to APP\";\n    await sleep(500);\n    x.innerHTML += \"<br>...APP: receiving result from Core\";\n    await sleep(1000);\n    x.innerHTML += \"<br>...APP: Result received, acknowledging 60 bike trips<br>------------- Finished -------------\";\n}\n    async function attack3() {\n    var x = document.getElementById(\"Cons3\");\n    x.innerHTML = \"running gps_cheat.sh\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 120 records from week 1 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 110 records from week 2 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 123 records from week 3 updated\";\n    await sleep(500);\n    x.innerHTML += \"<br>...gps_cheat: 105 records from week 4 updated\";\n    await sleep(1000);\n    x.innerHTML += \"<br>...APP: sending execution request : ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Received execution request: ComputeBikeStats from \" + lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: Gathering GPS data from \"+ lastMonthStart + \" to \" + lastMonthEnd;\n    await sleep(1000);\n    x.innerHTML += \"<br>...CORE: Requesting launch of the ComputeBikeStats data task\";\n    await sleep(500);\n    x.innerHTML += \"<br>...HOST: Data task is online on port <span style='color: red;'>666<\/span>\";\n    x.innerHTML += \"<br>...CORE: Sending data to ComputeBikeStats data task on port 666\";\n    await sleep(3000);\n    x.innerHTML += \" --> Number of computed bike trips: 60\";\n    await sleep(500);\n    x.innerHTML += \"<br>...CORE: sending the result to APP\";\n    await sleep(500);\n    x.innerHTML += \"<br>...APP: receiving result from Core\";\n    await sleep(1000);\n    x.innerHTML += \"<br>...APP: Result received, acknowledging 60 bike trips<br>------------- Finished -------------\";\n}\n<\/script>\n<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this game, the PDMS user tries to interfere with the computation of the number of bike trips in order to get the maximum benefit. Initially, the genuine GPS data of the user are already collected and stored inside the PDMS. If computed by the correct code, they would account\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/espdms\/game1\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":67,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-onecolumn.php","meta":{"footnotes":""},"class_list":["post-68","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/pages\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":159,"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/pages\/68\/revisions"}],"predecessor-version":[{"id":1152,"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/pages\/68\/revisions\/1152"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/espdms\/wp-json\/wp\/v2\/media?parent=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}