{"id":490,"date":"2017-11-08T03:34:45","date_gmt":"2017-11-08T01:34:45","guid":{"rendered":"https:\/\/moijari.com\/?p=490"},"modified":"2019-11-22T17:00:03","modified_gmt":"2019-11-22T15:00:03","slug":"salasanan-salakirjoitus-tertussa","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=490","title":{"rendered":"Salasanan salakirjoitus tertussa"},"content":{"rendered":"<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n. Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: <a href=\"https:\/\/moijari.com:5002\">moijari.com:5002<\/a>. Ressu satunnaislukuja l\u00f6ytyy osoitteesta: <a href=\"https:\/\/moijari.com:5001\">moijari.com:5001<\/a>. Ikuinen kalenteri osoitteesta: <a href=\"https:\/\/moijari.com:5003\">moijari.com:5003<\/a>.<\/p>\n<p>Salasana on salakirjoitettuna muodossa:<\/p>\n<pre>sha256:ee84f5affcf47d:51567b8c4c20db2a00ea24eaae125a26f5c7c87fdbe5b90a02225fc97008b49a (oheinen salasana on muuten \"SalaSana1234\") ja viel\u00e4\r\nunsigned char *peppper=\"l7IKrgcLMgsl_4Wv\";<\/pre>\n<p>Alussa salatun salasanan tallennusformaatti, kaksoispisteen j\u00e4lkeen alkaa salt:ti ja seuraavan kaksoispisteen j\u00e4lkeen alkaa kryptattu salasana.<\/p>\n<p>T\u00e4m\u00e4 ensimm\u00e4inen rutiini salakirjoittaa password kent\u00e4ss\u00e4 olevan salasanan ja muodostaa encpasswd kent\u00e4n joka sis\u00e4lt\u00e4\u00e4 salasanan salakirjoitetussa muodossa.<\/p>\n<pre>int encryptpasswd(unsigned char encpasswd[ENCPASSWD_SIZE],unsigned char *password)\r\n{\r\n\u00a0 int c,d;\r\n\r\n\u00a0 HashCtx ctx;\r\n\r\n\u00a0 unsigned char salt[7];\r\n\u00a0 unsigned char salthex[15];\r\n\u00a0 unsigned char twodigit[3];\r\n\u00a0 unsigned char temp[HashLen];\r\n\u00a0 unsigned char temphex[HashLen*2+1];\r\n\r\n\u00a0 memset(encpasswd,0,ENCPASSWD_SIZE);\r\n\r\n\u00a0 ressu_genbytes2(sizeof(salt),salt);\r\n\r\n  ...\r\n\r\n<\/pre>\n<p>Ohjelman alussa varataan erilaisia ohjelman tarvitsemia muistialueita. Salt kent\u00e4n tarkoituksena on erilaistaa sama salasana eri k\u00e4ytt\u00e4jill\u00e4 ja vaikeuttaa kryptattujen salasanojen hakemiston muodostamista. Salt on salakirjoittamattomana salakirjoitetussa salasanassa , ja kopioidaan sellaisenaan salasanan tarkastukseen. Temp kentt\u00e4\u00e4 taas k\u00e4ytet\u00e4\u00e4n kryptatun salasanan tallettamiseen..<\/p>\n<p>Seuraavat ohjelmarivit muuttavat salt:in heksamuotoon:<\/p>\n<pre>\u00a0 ...\r\n  for(c=0;c&lt;sizeof(salt);c++) {\r\n\u00a0\u00a0\u00a0 sprintf(twodigit,\"%02x\",salt[c]);\r\n\u00a0\u00a0\u00a0 strcat(salthex,twodigit);\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Seuraava kappale tekee varsinaisen salakirjoituksen, Salakirjoitus tehd\u00e4\u00e4n sha256 tiivisterutiinilla. HASHROUNDS on t\u00e4ll\u00e4 hetkell\u00e4 sata tuhatta, ja siihen on valittu mahdollisimman suuri luku, joka silti pit\u00e4\u00e4 logon-vaiheen keston kohtuullisena. Pepper on aloitusarvo rutiinille.<\/p>\n<pre>\u00a0 ...\r\n  memset(temp,0,sizeof(temp));\r\n\u00a0 strcpy(temp,pepper);\r\n\u00a0 for(c=0;c&lt;HASHROUNDS;c++) {\r\n\u00a0\u00a0\u00a0 HashInit(&amp;ctx);\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,temp,sizeof(temp));\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,salt,sizeof(salt));\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,password,strlen(password)+1);\r\n\u00a0\u00a0\u00a0 HashFinal(temp,&amp;ctx);\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Seuraavassa edellisen koodikappaleen tulos temp muuttujassa laitetaan heksamuotoon:<\/p>\n<pre>\u00a0 ...\r\n  temphex[0]='\\0';\r\n\u00a0 for(c=0;c&lt;sizeof(temp);c++) {\r\n\u00a0\u00a0\u00a0 sprintf(twodigit,\"%02x\",temp[c]);\r\n\u00a0\u00a0\u00a0 strcat(temphex,twodigit);\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Kootaan salakirjoitettu salasana:<\/p>\n<pre>\u00a0 ...\r\n  strcpy(encpasswd,\"sha256:\");\r\n\u00a0 strcat(encpasswd,salthex);\r\n\u00a0 strcat(encpasswd,\":\");\r\n\u00a0 strcat(encpasswd,temphex);\r\n  ...<\/pre>\n<p>Ja tyhjennet\u00e4\u00e4n viel\u00e4 v\u00e4likent\u00e4t, jottei niit\u00e4 vuoda ulos aliohjelmasta: ja funktion lopussa viel\u00e4 return lause (0=ok).<\/p>\n<pre>  ...\r\n\u00a0 memset(salt,0,sizeof(salt));\r\n\u00a0 memset(salthex,0,sizeof(salthex));\r\n\u00a0 memset(temp,0,sizeof(temp));\r\n\u00a0 memset(temphex,0,sizeof(temphex));\r\n\r\n\u00a0 return(0);\r\n}\r\n<\/pre>\n<p>Salasanan tarkistus funktio tekee oikeastaan samat asiat, hieman muuteltuna: koodikappaleen loppu tarkistaa salakirjoitetun salasanan tallennusformaatin ja\u00a0 hakee salt:in heksamuodossa. Salt haetaan parametrina annetusta salakirjoitetusta salasanasta.<\/p>\n<pre>int checkpasswd(unsigned char encpasswd[ENCPASSWD_SIZE],unsigned char *password)\r\n{\r\n\u00a0 int c,d,e,byte,ok;\r\n\u00a0 unsigned char *p,*s;\r\n\u00a0 HashCtx ctx;\r\n\r\n\u00a0 unsigned char salt[7];\r\n\u00a0 unsigned char salthex[15];\r\n\u00a0 unsigned char twodigit[3];\r\n\u00a0 unsigned char temp[HashLen];\r\n\u00a0 unsigned char temphex[HashLen*2+1];\r\n\u00a0 unsigned char encpasswd2[128];\r\n\r\n\u00a0 p=encpasswd;\r\n\r\n\u00a0 if(strncmp(p,\"sha256:\",7))\r\n\u00a0\u00a0\u00a0 return(1);\r\n\r\n\u00a0 p+=7;\r\n\u00a0 s=salthex;\r\n\u00a0 while(*p!=':') {\r\n\u00a0\u00a0\u00a0 *s++=*p++;\r\n\u00a0 }\r\n\u00a0 *s='\\0';\r\n  ...<\/pre>\n<p>Salasanan tarkistusrutiini hakee saltin satunnaisbittigeneraattorin sijasta annetusta salakirjoitetusta salasanasta.<\/p>\n<p>Seuraava siirt\u00e4\u00e4 heksana olevan saltin bin\u00e4\u00e4rimuotoon:<\/p>\n<pre>  ...\r\n  c=0;\r\n\u00a0 s=salthex;\r\n\u00a0 for(;;) {\r\n\u00a0\u00a0\u00a0 if((d=gethexdigit(*s++))==-1) break;\r\n\u00a0\u00a0\u00a0 if((e=gethexdigit(*s++))==-1) break;\r\n\u00a0\u00a0\u00a0 byte=d*16+e;\r\n\u00a0\u00a0\u00a0 salt[c++]=byte;\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Varsinainen salasanan kryptausosa on samanlainen kun edellisess\u00e4 crypt rutiinissa:<\/p>\n<pre> \u00a0...\r\n  memset(temp,0,sizeof(temp));\r\n\u00a0 strcpy(temp,pepper);\r\n\u00a0 for(c=0;c&lt;HASHROUNDS;c++) {\r\n\u00a0\u00a0\u00a0 HashInit(&amp;ctx);\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,temp,sizeof(temp));\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,salt,sizeof(salt));\r\n\u00a0\u00a0\u00a0 HashUpdate(&amp;ctx,password,strlen(password)+1);\r\n\u00a0\u00a0\u00a0 HashFinal(temp,&amp;ctx);\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Muokanaan salakirjoitettu salasana temp kent\u00e4st\u00e4 temphex kentt\u00e4\u00e4n heksamuotoon:<\/p>\n<pre>\u00a0 ...\r\n  temphex[0]='\\0';\r\n\u00a0 for(c=0;c&lt;sizeof(temp);c++) {\r\n\u00a0\u00a0\u00a0 sprintf(twodigit,\"%02x\",temp[c]);\r\n\u00a0\u00a0\u00a0 strcat(temphex,twodigit);\r\n\u00a0 }\r\n  ...<\/pre>\n<p>Muodostetaan varsinainen salasana salakirjoitetussa muodossa:<\/p>\n<pre>\u00a0 ...\r\n  strcpy(encpasswd2,\"sha256:\");\r\n\u00a0 strcat(encpasswd2,salthex);\r\n\u00a0 strcat(encpasswd2,\":\");\r\n\u00a0 strcat(encpasswd2,temphex);\r\n  ...<\/pre>\n<p>Vertaillaan salakirjoitettuna annettua salasanaa ja selv\u00e4kielisest\u00e4 salasanasta muodostettua salakirjoitettua salasanaa kesken\u00e4\u00e4n, tyhjennell\u00e4\u00e4n kentti\u00e4 ja palautetaan totuusarvo:<\/p>\n<pre>\u00a0 ...\r\n\u00a0 if(!strcmp(encpasswd,encpasswd2)) {\r\n\u00a0\u00a0\u00a0 fprintf(stdout,\"\\n*************ok\");\r\n\u00a0\u00a0\u00a0 ok=0;\r\n\u00a0 } else {\r\n\u00a0\u00a0\u00a0 fprintf(stdout,\"\\n*************error\");\r\n\u00a0\u00a0\u00a0 ok=1;\r\n\u00a0 }\r\n\r\n\u00a0 memset(encpasswd2,0,ENCPASSWD_SIZE);\r\n\u00a0 memset(salt,0,sizeof(salt));\r\n\u00a0 memset(salthex,0,sizeof(salthex));\r\n\u00a0 memset(temp,0,sizeof(temp));\r\n\u00a0 memset(temphex,0,sizeof(temphex));\r\n\r\n\u00a0 return(ok);\r\n}<\/pre>\n<p>T\u00e4ss\u00e4 viel\u00e4 gethexdigit:<\/p>\n<pre>int gethexdigit(char h)\r\n{\r\n\u00a0 int byte;\r\n\r\n\u00a0 if(h&gt;='0' &amp;&amp; h&lt;='9')\r\n\u00a0\u00a0\u00a0 byte=h-'0';\r\n\u00a0 else if(h&gt;='a' &amp;&amp; h&lt;='f')\r\n\u00a0\u00a0\u00a0 byte=h-'a'+10;\r\n\u00a0 else if(h&gt;='A' &amp;&amp; h&lt;='F')\r\n\u00a0\u00a0\u00a0 byte=h-'A'+10;\r\n\u00a0 else\r\n\u00a0\u00a0\u00a0 byte=-1;\r\n\r\n\u00a0 return(byte);\r\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kaikki oikeudet tietenkin pid\u00e4tet\u00e4\u00e4n. Viimeinen versio ohjelmasta l\u00f6ytyy seuraavasta linkist\u00e4: moijari.com:5002. Ressu satunnaislukuja l\u00f6ytyy osoitteesta: moijari.com:5001. Ikuinen kalenteri osoitteesta: moijari.com:5003. Salasana on salakirjoitettuna muodossa: sha256:ee84f5affcf47d:51567b8c4c20db2a00ea24eaae125a26f5c7c87fdbe5b90a02225fc97008b49a (oheinen salasana on muuten &#8220;SalaSana1234&#8243;) ja viel\u00e4 unsigned char *peppper=&#8221;l7IKrgcLMgsl_4Wv&#8221;; Alussa salatun salasanan tallennusformaatti, kaksoispisteen j\u00e4lkeen alkaa salt:ti ja seuraavan kaksoispisteen j\u00e4lkeen alkaa kryptattu salasana. T\u00e4m\u00e4 ensimm\u00e4inen rutiini salakirjoittaa password&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=490\">Continue reading <span class=\"screen-reader-text\">Salasanan salakirjoitus tertussa<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,5],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/490"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=490"}],"version-history":[{"count":32,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/490\/revisions"}],"predecessor-version":[{"id":526,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/490\/revisions\/526"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}