{"id":208,"date":"2013-11-28T01:54:41","date_gmt":"2013-11-27T23:54:41","guid":{"rendered":"http:\/\/calypt.com\/blog\/?p=208"},"modified":"2013-11-28T01:54:41","modified_gmt":"2013-11-27T23:54:41","slug":"grehack-2013-write-crypto-500-wiener","status":"publish","type":"post","link":"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/","title":{"rendered":"GreHack 2013 &#8211; Write-up CRYPTO 500 Wiener"},"content":{"rendered":"<h1><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=\"375\" height=\"83\" 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: 375px) 100vw, 375px\" \/><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-243\" title=\"wiener\" alt=\"wiener\" src=\"http:\/\/calypt.com\/blog\/wp-content\/uploads\/2013\/11\/wiener.png\" width=\"116\" height=\"77\" \/><\/h1>\n<p>&nbsp;<\/p>\n<p>Dans ce write-up du challenge Crypto 500 &#8211; Wiener de GreHack, nous utilisons <a href=\"http:\/\/www.sagemath.org\">Sage<\/a> et <a href=\"http:\/\/www.openssl.org\">OpenSSL<\/a>. Il est possible d&#8217;utiliser ses propres outils comme <a href=\"http:\/\/pari.math.u-bordeaux.fr\">Pari\/GP<\/a> mais si vous n&#8217;avez pas d&#8217;outils de pr\u00e9dilection et \/ ou que RSA ne vous est pas familier, nous vous conseillons de lire l&#8217;<a href=\"http:\/\/calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\">article pr\u00e9c\u00e9dent<\/a> afin de comprendre la d\u00e9marche et l&#8217;utilisation des outils.<\/p>\n<h1><\/h1>\n<p>&nbsp;<\/p>\n<h1>Fichiers fournis par GreHack<\/h1>\n<p>Clef publique : <a href=\"http:\/\/calypt.com\/grehack_13\/crypto_500W\/Michael-Wiener.pub\">Michael-Wiener.pub<\/a><\/p>\n<p>Fichier chiffr\u00e9 : <a href=\"http:\/\/calypt.com\/grehack_13\/crypto_500W\/flag.enc\">flag.enc<\/a><\/p>\n<p>On a donc, a priori, un fichier chiffr\u00e9 avec un chiffrement asym\u00e9trique (RSA ?!). L&#8217;indice nous donne le nom du cryptanalyste Michael J. Wiener, dont une rapide recherche Google nous am\u00e8ne sur la page Wikipedia <a href=\"http:\/\/en.wikipedia.org\/wiki\/Wiener%27s_attack\">Wiener&#8217;s attack<\/a>. Cela confirme nos soup\u00e7ons sur RSA et il ne nous reste plus qu&#8217;a extraire les param\u00e8tres RSA, puis d&#8217;impl\u00e9menter en <a href=\"http:\/\/www.sagemath.org\/\">Sage<\/a> l&#8217;attaque de Wiener !<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Extraction des param\u00e8tres et attaque de Wiener<\/h1>\n<pre><strong>$&gt;<\/strong> openssl asn1parse -in Michael-Wiener.pub\u00a0 -i -strparse 19<span style=\"color: #008000;\">\u00a0\u00a0<span style=\"color: #808000;\"> \/\/obtention de n et e<\/span><\/span><\/pre>\n<pre>    0:d=0  hl=4 l=1034 cons: SEQUENCE          \r\n    4:d=1  hl=4 l= 513 prim:  INTEGER           :<span style=\"color: #0000ff;\">0331702C5FE01F2401C9E44EC0BA79E4<\/span>[...]\r\n  521:d=1  hl=4 l= 513 prim:  INTEGER           :<span style=\"color: #339966;\">02C398BE3121D210E2F54DBA688A0F16<\/span>[...]<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>$&gt;<\/strong> sage<\/p>\n<pre>sage: n = 0x<span style=\"color: #0000ff;\">0331702C5FE01F2401C9E44EC0BA79E4<\/span>[...]\u00a0 <span style=\"color: #808000;\">\/\/ copi\u00e9 \/ coll\u00e9 depuis openssl\r\n<\/span><\/pre>\n<pre>sage: e = 0x<span style=\"color: #339966;\">02C398BE3121D210E2F54DBA688A0F16<\/span>[...]<span style=\"color: #808000;\">\u00a0 \/\/ idem<\/span><\/pre>\n<pre>sage: c_fracs = continued_fraction(e\/n).convergents()\u00a0 <span style=\"color: #808000;\">\/\/ calcul des fractions continues comme <a href=\"http:\/\/en.wikipedia.org\/wiki\/Wiener%27s_attack#Wiener.27s_theorem\">ici<\/a><\/span><\/pre>\n<pre>sage: test_message = 42\u00a0 <span style=\"color: #808000;\">\/\/\u00a0 message qui nous servira \u00e0 v\u00e9rifier que l'on a bien trouv\u00e9 la clef priv\u00e9e<\/span><\/pre>\n<pre>sage: test_message_encryted = pow(test_message,e,n)<\/pre>\n<p>&nbsp;<\/p>\n<p>Gr\u00e2ce \u00e0 Wiener, on sait que la clef priv\u00e9e (d) est pr\u00e9sente parmi les d\u00e9nominateurs des fractions continues (c_fracs). On va donc parcourir l&#8217;ensemble des fractions continues et tenter de d\u00e9chiffrer notre test_message avec le d\u00e9nominateur actuel. Si le d\u00e9chiffrement est bon, c&#8217;est que l&#8217;on a trouv\u00e9 la clef.<\/p>\n<pre><span style=\"color: #808080;\">\r\nsage:<\/span> for i in xrange(len(c_fracs)):<\/pre>\n<pre style=\"padding-left: 60px;\">if pow(test_message_encryted,c_fracs[i].denom(),n) == test_message:<\/pre>\n<pre style=\"padding-left: 90px;\">d = c_fracs[i].denom()<\/pre>\n<pre style=\"padding-left: 90px;\">break<\/pre>\n<pre><span style=\"color: #808080;\">sage:<\/span> file_flag = open(\"flag.enc\", 'r').read()\u00a0 <span style=\"color: #808000;\">\/\/ on lit le fichier chiffr\u00e9 contenant le flag<\/span><\/pre>\n<pre><span style=\"color: #808080;\">sage:<\/span> flag_encrypted = text2Int(file_flag)<span style=\"color: #808000;\">\u00a0 \/\/ binaire -&gt; entier (voir <a href=\"http:\/\/calypt.com\/blog\/index.php\/grehack-write-crypto-300\/\">Crypto 300 2.3.1<\/a>)<\/span><\/pre>\n<pre><span style=\"color: #808080;\">sage:<\/span> flag = pow(flag_encrypted,d,n) <span style=\"color: #808000;\">\/\/ d\u00e9chiffrement <\/span><\/pre>\n<pre><span style=\"color: #808080;\">sage:<\/span> int2Text(int(flag),45)\u00a0 <span style=\"color: #808000;\">\/\/ flag !<\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Dans ce write-up du challenge Crypto 500 &#8211; Wiener de GreHack, nous utilisons Sage et OpenSSL. Il est possible d&#8217;utiliser ses propres outils comme Pari\/GP mais si vous n&#8217;avez pas d&#8217;outils de pr\u00e9dilection et \/ ou que RSA ne vous est pas familier, nous vous conseillons de lire l&#8217;article pr\u00e9c\u00e9dent afin de comprendre la [&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":[48,42,46,47,49],"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 500 - Wiener du CTF GreHack 2013. Nous utilisons Sage et Openssl pour la r\u00e9solution de ce challenge RSA (attaque de Wiener).\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/\" \/>\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 500 Wiener - Calypt\" \/>\n<meta property=\"og:description\" content=\"Write Up du challenge Crypto 500 - Wiener du CTF GreHack 2013. Nous utilisons Sage et Openssl pour la r\u00e9solution de ce challenge RSA (attaque de Wiener).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/\" \/>\n<meta property=\"og:site_name\" content=\"Calypt\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-27T23:54:41+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=\"2 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-2013-write-crypto-500-wiener\/#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-2013-write-crypto-500-wiener\/#webpage\",\"url\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/\",\"name\":\"GreHack 2013 - Write-up CRYPTO 500 Wiener - Calypt\",\"isPartOf\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/#primaryimage\"},\"datePublished\":\"2013-11-27T23:54:41+00:00\",\"dateModified\":\"2013-11-27T23:54:41+00:00\",\"author\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/#\/schema\/person\/b39592c4058c8985f373832ef96a7cf6\"},\"description\":\"Write Up du challenge Crypto 500 - Wiener du CTF GreHack 2013. Nous utilisons Sage et Openssl pour la r\\u00e9solution de ce challenge RSA (attaque de Wiener).\",\"breadcrumb\":{\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/#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-2013-write-crypto-500-wiener\/\",\"url\":\"https:\/\/www.calypt.com\/blog\/index.php\/grehack-2013-write-crypto-500-wiener\/\",\"name\":\"GreHack 2013 &#8211; Write-up CRYPTO 500 Wiener\"}}]},{\"@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\/208"}],"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=208"}],"version-history":[{"count":33,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":264,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/208\/revisions\/264"}],"wp:attachment":[{"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.calypt.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}