{"id":151,"date":"2013-11-23T18:10:58","date_gmt":"2013-11-23T16:10:58","guid":{"rendered":"http:\/\/calypt.com\/blog\/?p=151"},"modified":"2013-11-28T00:33:32","modified_gmt":"2013-11-27T22:33:32","slug":"grehack-write-crypto-300","status":"publish","type":"post","link":"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/","title":{"rendered":"GreHack 2013 &#8211; Write-up CRYPTO 300 Microsoft PKI"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-148\" alt=\"Grehack\" src=\"http:\/\/calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack-600x133.png\" width=\"600\" height=\"133\" srcset=\"https:\/\/www.calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack-600x133.png 600w, https:\/\/www.calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack.png 1000w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Plus qu&#8217;un pur Write-Up, ce post est un \u00ab RSA CTF 101 \u00bb. En effet il nous servira de r\u00e9f\u00e9rence pour tous les prochains Write-Up de crypto contenant du RSA. Ce challenge est un excellent exemple pour un CTF, id\u00e9al pour une premi\u00e8re fois&#8230; mais les habitu\u00e9s se passeront s\u00fbrement de la lecture du chapitre 2.0 &#8211; <em>Rappels sur RSA<\/em>. Merci \u00e0 <a href=\"http:\/\/grehack.org\" target=\"_blank\">GreHack<\/a> et <a href=\"http:\/\/ensiwiki.ensimag.fr\/index.php\/Portail:SecurIMAG_Ensimag_IT_security_and_hacking_club\" target=\"_blank\">SecurImag<\/a> pour leurs chall de qualit\u00e9 !<\/p>\n<h1><\/h1>\n<p>&nbsp;<\/p>\n<h1>1 &#8211; Reconnaissance<\/h1>\n<h3>1.1 &#8211; Fichiers fournis par Grehack<\/h3>\n<p>Dans cette \u00e9preuve on a 3 fichiers :<\/p>\n<p>&#8211; clef publique de Bill Gates (<a href=\"http:\/\/www.calypt.com\/grehack_13\/crypto_300\/bill-gates.pub\">bill-gates.pub<\/a>);<\/p>\n<p>&#8211; clef publique de Steve Ballmer (<a href=\"http:\/\/www.calypt.com\/grehack_13\/crypto_300\/steeve-ballmer.pub\">steeve-ballmer.pub<\/a>);<\/p>\n<p>&#8211; secret chiffr\u00e9 (<a href=\"http:\/\/www.calypt.com\/grehack_13\/crypto_300\/secret.enc\">secret.enc<\/a>).<\/p>\n<p>&nbsp;<\/p>\n<h3>1.2 &#8211; Indice et id\u00e9e de r\u00e9solution<\/h3>\n<p>Le texte descriptif du Readme nous indique que le secret est un mail de Ballmer, <strong>destin\u00e9 \u00e0 Gates<\/strong>. On a donc un syst\u00e8me de <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Cryptographie_asym%C3%A9trique#Diffusion_des_cl.C3.A9s_publiques\" target=\"_blank\">cryptographie asym\u00e9trique,<\/a> avec le secret chiffr\u00e9 par la clef publique de Gates. On va chercher \u00e0 r\u00e9cup\u00e9rer la <strong>clef priv\u00e9e de Gates<\/strong> afin de pouvoir d\u00e9chiffrer le secret et obtenir le flag de l&#8217;\u00e9preuve&#8230; et marquer 300 points pour GreHack !<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>2 &#8211; Here we go, <span style=\"color: #ffffff;\">bitches<\/span><\/h1>\n<p>L&#8217;algo le plus courant de crypto asym\u00e9trique est <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Chiffrement_RSA\" target=\"_blank\">RSA<\/a>. La m\u00e9thode la plus courante pour retrouver une clef priv\u00e9e RSA \u00e0 partir de la clef publique est la <strong>factorisation de n<\/strong> &#8230; un rappel s&#8217;impose.<\/p>\n<h3><\/h3>\n<h3>2.0 &#8211; Rappels sur RSA<\/h3>\n<p>Comme quasiment tout le temps en crypto, je vais utiliser l\u2019excellent <a href=\"http:\/\/www.sagemath.org\/fr\/\" target=\"_blank\">SAGE<\/a> (tr\u00e8s bon livre en pdf <a href=\"http:\/\/sagebook.gforge.inria.fr\/\" target=\"_blank\">ici<\/a>). SAGE est une surcouche \u00e0 python permettant de faire du calcul math\u00e9matique. Toutes les commandes de ce post sont interpr\u00e9tables en Sage. Il existe bien sur d&#8217;autres solutions comme <a href=\"http:\/\/pari.math.u-bordeaux.fr\/\" target=\"_blank\">PARI\/gp<\/a>, ou bien des solutions commerciales comme <a href=\"http:\/\/www.maplesoft.com\/\" target=\"_blank\">Maple<\/a> ou <a href=\"http:\/\/magma.maths.usyd.edu.au\/magma\/\" target=\"_blank\">Magma<\/a>.<\/p>\n<h4>Clef publique : (n,e)<\/h4>\n<p>1 &#8211; Pour g\u00e9n\u00e9rer une clef publique RSA, on choisit 2 nombres premiers <strong>p<\/strong> et <strong>q<\/strong> et on calcule <strong>n<\/strong> tel que <strong>n = p*q<\/strong><\/p>\n<p style=\"padding-left: 30px;\"><em>sage: p = random_prime(2^512)<\/em><\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>q = random_prime(2^512)<\/em><\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>n = p*q<\/em><\/p>\n<p>2 &#8211; <strong>e<\/strong> est choisi <strong><\/strong> tel que <strong>(p-1)*(q-1) et e soient premiers entre eux<\/strong>. En pratique on choisit souvent e = 65537<\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>e = 65537<\/em><\/p>\n<h4>Clef priv\u00e9e : d<\/h4>\n<p>La clef priv\u00e9e <strong>d <\/strong>est l&#8217;inverse de <strong>e<\/strong> modulo <strong>(p-1)*(q-1)<\/strong><\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>d = inverse_mod(e,(p-1)*(q-1))<\/em><\/p>\n<h4>Chiffrement<\/h4>\n<p>On \u00e9l\u00e8ve le <strong>message \u00e0 chiffrer puissance e modulo n <\/strong>(en utilisant donc la clef publique (n,e)).<\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>message = 42<\/em><\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>chiffre = pow(message,e,n)<\/em><\/p>\n<h4>D\u00e9chiffrement<\/h4>\n<p>On \u00e9leve le <strong>texte chiffr\u00e9 puissance d modulo n<\/strong> (clef priv\u00e9e d)<\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>message = pow(chiffre,d,n)<\/em><\/p>\n<h4>Factorisation<\/h4>\n<p>Si n est petit, <strong>on peut retrouver p et q \u00e0 partir de n<\/strong>, et donc d, la clef priv\u00e9e (cf chiffrement).<\/p>\n<p style=\"padding-left: 30px;\"><em><em>sage: <\/em>p,q=factor(n)<\/em><\/p>\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<h3>2.1 &#8211; Clef publique de Bill Gates<\/h3>\n<p>Contenu de <a href=\"http:\/\/www.calypt.com\/grehack_13\/crypto_300\/bill-gates.pub\"><strong>bill-gates.pub<\/strong><\/a> :<\/p>\n<pre>-----BEGIN PUBLIC KEY-----\r\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEB2CW7Y+cYYCBDFkNgqsDY\r\nYjZsapoerdCtdqHNL06htNhOARu22sU7rHcjiIK0sS0aeYjJN+gasQRwXTWUtERX\r\nTbvYQX\/Gq20DeHpVwMwh4Filo8WXglIqD2bMDmfz8ck4hEaCtWQERlA21XYuk1\/l\r\nCOQEHoN3hwIzaZuMLeY6qlYFl0\/Fx9BVDd3hYb+2RSFUJFrEL3I3p8BMFY6l14AN\r\n8E+yo9o\/CvYdB+HaWkUhL5ZCyQYpKc5b2R0MZzoHo0rUhGYm6HpT3OoYPih+Aswc\r\nX1WFVR9gTXIesiToYp5I2Q3vKOHfyVNmeUe5+EwdM3JG5MyClI5Oh2peJgqlPd9S\r\nhBvZTITWy3vUq0l6etStsVaiQEEQJIycQ5RYOWY8Fg\/0RzAwSNP1wj0fvvjpx+p\/\r\nuSgzc6d1mbduRbThJ7c+6wmOZIdZA9BzOeSWFH3DOKLxFRC6RanSgTyhqU1HfYAD\r\nvHA8d5vWYVwdc+rvd1IFQ2ydTg+AT9Pn1v4E5eZk\/UKcMHIWJopqbd2mwt1fLJYL\r\naSwMr3+rBGAtSumh7luYagtr3LXKsR+21A3eRv0LKk6eUtRMaHrkbWmiOvTiXd8r\r\nZMq\/i7vENvVk\/p9Sn5mMEUUp7evxL0t8P7SnEMGMe1M1EPaKKROqgMsa\/abEJ6sM\r\nNzOVAFVK62LymOaFO\/V0Ec8CAwEAAQ==\r\n-----END PUBLIC KEY-----<\/pre>\n<p>&nbsp;<\/p>\n<p>La clef publique semble avoir une forme classique, on peut essayer de la d\u00e9coder avec un d\u00e9codeur <a href=\"http:\/\/en.wikipedia.org\/wiki\/Abstract_Syntax_Notation_One\" target=\"_blank\">ASN.1<\/a> :<\/p>\n<p style=\"padding-left: 30px;\"><em>$&gt; openssl asn1parse -in bill-gates.pub <span style=\"color: #808000;\">\/\/<\/span>\u00a0 <span style=\"color: #808000;\">les brebis \u00e9gar\u00e9es ne poss\u00e9dant pas openssl peuvent utiliser ce service en ligne : <a href=\"http:\/\/holtstrom.com\/michael\/tools\/asn1decoder.php\" target=\"_blank\">ASN1Decoder<\/a><\/span><br \/>\n<\/em><\/p>\n<pre style=\"padding-left: 30px;\">0:d=0\u00a0 hl=4 l= 546 cons: SEQUENCE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n4:d=1\u00a0 hl=2 l=\u00a0 13 cons: SEQUENCE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n6:d=2\u00a0 hl=2 l=\u00a0\u00a0 9 prim: OBJECT\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 :rsaEncryption\r\n17:d=2\u00a0 hl=2 l=\u00a0\u00a0 0 prim: NULL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n19:d=1\u00a0 hl=4 l= 527 prim: BIT STRING<\/pre>\n<p>&nbsp;<\/p>\n<p>Le chiffrement RSA est donc confirm\u00e9 et on peut extraire la clef publique \u00e0 l&#8217;offset 19 dans le BIT STRING :<\/p>\n<p style=\"padding-left: 30px;\"><em>$&gt; openssl asn1parse -in bill-gates.pub -i -strparse 19<\/em><\/p>\n<pre style=\"padding-left: 30px;\"> 0:d=0\u00a0 hl=4 l= 522 cons: SEQUENCE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \r\n4:d=1\u00a0 hl=4 l= 513 prim:\u00a0 INTEGER :<span style=\"color: #0000ff;\">01D825BB63E718602043164360AAC0D862366C6A9A1EADD0AD76A1CD2F4EA1B4D84E011BB6<\/span>[...]\r\n\u00a0521:d=1\u00a0 hl=2 l=\u00a0\u00a0 3 prim:\u00a0 INTEGER\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 :010001<\/pre>\n<p>&nbsp;<\/p>\n<p>A\u00efe. On retrouve bien <strong>e<\/strong> = 0x010001 = 65537 mais <strong>n<\/strong> parait beaucoup trop grand pour \u00eatre factoris\u00e9 sans l&#8217;aide de la NSA.<\/p>\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<h3>2.2 PGCD<\/h3>\n<p>On remarque que l&#8217;\u00e9preuve nous fournit aussi la clef publique de Ballmer (<a href=\"http:\/\/www.calypt.com\/grehack_13\/crypto_300\/steeve-ballmer.pub\">steeve-ballmer.pub<\/a>), a priori inutile, mais dont on peut se servir pour obtenir des informations. Bill Gates et Steve Ballmer \u00e9tant \u00ab q et chemise \u00bb il ne serait pas \u00e9tonnant qu&#8217;ils partagent jusqu&#8217;\u00e0 une partie de leur clef priv\u00e9e. Pour le v\u00e9rifier, calculer le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Plus_grand_commun_diviseur\" target=\"_blank\">PGCD<\/a> entre les 2 clefs publiques est une bonne solution. On r\u00e9cup\u00e8re la clef publique (n) de Ballmer avec <em>openssl asn1pare,<\/em> et on calcul le PGCD avec SAGE :<\/p>\n<p style=\"padding-left: 30px;\"><em>sage: <\/em>nBill = 0x<span style=\"color: #0000ff;\">01D825BB63E718602043164360AA<\/span>[&#8230;] \u00a0 \u00a0 <span style=\"color: #808000;\">\/\/copi\u00e9e coll\u00e9e depuis la sortie d&#8217;openssl asn1parse<br \/>\n<\/span><\/p>\n<p style=\"padding-left: 30px;\"><em>sage: <\/em>nSteve = 0x02703BC6C9BE0489B3A[&#8230;]\u00a0\u00a0\u00a0 <span style=\"color: #808000;\">\/\/idem pour steeve-ballmer.pub<br \/>\n<\/span><\/p>\n<p style=\"padding-left: 30px;\"><em>sage: <\/em>q = gcd(nBill,nSteve)\u00a0\u00a0\u00a0 <span style=\"color: #808000;\">\/\/si gcd() renvoi un nombre, c&#8217;est que nBill et nSteve partagent un facteur<\/span><\/p>\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<h3>2.3 R\u00e9solution de l&#8217;\u00e9preuve Crypto 300 Microsoft PKI &#8211; Grehack<\/h3>\n<h4>2.3.1 Fonctions n\u00e9cessaires \u00e0 la r\u00e9solution (r\u00e9cup\u00e9r\u00e9es <span style=\"text-decoration: underline;\"><a href=\"http:\/\/jhafranco.com\/2012\/01\/29\/rsa-implementation-in-python\/\">ici<\/a><\/span>)<\/h4>\n<p>[pastacode provider=&#8221;manual&#8221; lang=&#8221;python&#8221;]<\/p>\n<pre><code>def text2Int(text):\r\n    \"\"\"Convert a text string into an integer\"\"\"\r\n    return reduce(lambda x, y : (x &lt;&lt; 8) + y, map(ord, text))\r\n\r\ndef int2Text(number, size):\r\n    \"\"\"Convert an integer into a text string\"\"\"\r\n    text = \"\".join([chr((number &gt;&gt; j) &amp; 0xff) for j in reversed(range(0, size &lt;&lt; 3, 8))])\r\n    return text.lstrip(\"\\x00\")<\/code><\/pre>\n<p>[\/pastacode]<\/p>\n<h4>2.3.2 R\u00e9solution<\/h4>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>pBill = nBill\/q    <span style=\"color: #808000;\">\/\/ n=p*q =&gt; p=n\/q<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>e = 0x010001    <span style=\"color: #808000;\">\/\/ e = 65537 <\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>d = inverse_mod(e,(pBill-1)*(q-1))    <span style=\"color: #808000;\">\/\/ on calcule la clef priv\u00e9e de Bill<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>file = open(\"secret.enc\",'r',)<\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>cipher = file.read()    <span style=\"color: #808000;\">\/\/ on met le fichier dans le buffer cipher<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>cipher_i  = text2Int(cipher)    <span style=\"color: #808000;\">\/\/ on transforme le binaire en INT pour pouvoir faire des op\u00e9rations dessus<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>clair_i = pow(cipher_i,d,nBill)    <span style=\"color: #808000;\">\/\/ d\u00e9chiffrement du message avec la clef priv\u00e9e d<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><em>sage: <\/em>int2Text(int(clair_i),38)    <span style=\"color: #808000;\">\/\/ obtention du FLAG !<\/span><\/pre>\n<p>&nbsp;<\/p>\n<p>\u00c0 bient\u00f4t pour le Crypto 500 \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Plus qu&#8217;un pur Write-Up, ce post est un \u00ab RSA CTF 101 \u00bb. En effet il nous servira de r\u00e9f\u00e9rence pour tous les prochains Write-Up de crypto contenant du RSA. Ce challenge est un excellent exemple pour un CTF, id\u00e9al pour une premi\u00e8re fois&#8230; mais les habitu\u00e9s se passeront s\u00fbrement de la lecture du [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[17,23,41,40,39],"tags":[50,48,42,46,47],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.1.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"description\" content=\"Write-up du challenge CRYPTO 300 Microsoft PKI de Grehack 2013. Nous utilisons SAGE et openssl pour r\u00e9soudre cette \u00e9preuve bas\u00e9e sur RSA. Par Calypt.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GreHack 2013 - Write-up CRYPTO 300 Microsoft PKI - Calypt\" \/>\n<meta property=\"og:description\" content=\"Write-up du challenge CRYPTO 300 Microsoft PKI de Grehack 2013. Nous utilisons SAGE et openssl pour r\u00e9soudre cette \u00e9preuve bas\u00e9e sur RSA. Par Calypt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\" \/>\n<meta property=\"og:site_name\" content=\"Calypt\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-23T16:10:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-11-27T22:33:32+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack-600x133.png\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"5 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.calypt.com\/blog\/#website\",\"url\":\"https:\/\/www.calypt.com\/blog\/\",\"name\":\"Calypt\",\"description\":\"Security thoughts\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.calypt.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack-600x133.png\",\"contentUrl\":\"http:\/\/calypt.com\/blog\/wp-content\/uploads\/2013\/11\/grehack-600x133.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/#webpage\",\"url\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\",\"name\":\"GreHack 2013 - Write-up CRYPTO 300 Microsoft PKI - Calypt\",\"isPartOf\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/#primaryimage\"},\"datePublished\":\"2013-11-23T16:10:58+00:00\",\"dateModified\":\"2013-11-27T22:33:32+00:00\",\"author\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/#\/schema\/person\/b39592c4058c8985f373832ef96a7cf6\"},\"description\":\"Write-up du challenge CRYPTO 300 Microsoft PKI de Grehack 2013. Nous utilisons SAGE et openssl pour r\\u00e9soudre cette \\u00e9preuve bas\\u00e9e sur RSA. Par Calypt.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.calypt.com\/blog\/\",\"url\":\"https:\/\/www.calypt.com\/blog\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\",\"url\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\",\"name\":\"GreHack 2013 &#8211; Write-up CRYPTO 300 Microsoft PKI\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.calypt.com\/blog\/#\/schema\/person\/b39592c4058c8985f373832ef96a7cf6\",\"name\":\"Lo\\u00efc\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.calypt.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3c9955a661ca1f761736f9a7f32772c3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3c9955a661ca1f761736f9a7f32772c3?s=96&d=mm&r=g\",\"caption\":\"Lo\\u00efc\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/151"}],"collection":[{"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=151"}],"version-history":[{"count":45,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/151\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/151\/revisions\/233"}],"wp:attachment":[{"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}