{"id":1499,"date":"2020-12-12T18:58:20","date_gmt":"2020-12-12T16:58:20","guid":{"rendered":"https:\/\/moijari.com\/?p=1499"},"modified":"2023-02-22T13:13:44","modified_gmt":"2023-02-22T11:13:44","slug":"istuntoavaimen-luominen","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=1499","title":{"rendered":"Istuntoavaimen luominen"},"content":{"rendered":"\n<p>T\u00e4ss\u00e4 postissa k\u00e4yn l\u00e4pi tertun ns istuntoavaimen muodostamisen. Istuntoavaimen luomiseen tarvitaan satunnaisbittigeneraattori ja joku sis\u00e4inen malli, jonka mukaan istuntoavain muodostetaan satunnaisbittigeneraattorin antamista biteist\u00e4. Ensin yksinkertainen satunnaisbittigeneraattori ressu:<\/p>\n\n\n\n<p>T\u00e4ss\u00e4 k\u00e4ytet\u00e4\u00e4n vain yht\u00e4 l\u00e4hdett\u00e4, ressua. Varmuuden vuoksi kannattaa lis\u00e4t\u00e4 ainakin toinen l\u00e4hde.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;sys\/time.h>\n\nunsigned char dba_clockbyte() \/* JariK 2013-2020 *\/\n{\n  struct timeval tv;\n\n  gettimeofday(&amp;tv,NULL);\n\n  return(tv.tv_usec &amp; 0xff);\n}\n\nvoid dba_ressu_genbytes(int size, unsigned char *buffer) \/* JariK 12\/2020 *\/\n{\n  int c, d, e, f, byte, prevbyte, bits;\n\n  f=0;\n  bits=0;\n\n  for(c=0; c&lt;8 || c%8!=0 || c&lt;16 || c&lt;48 ||\n      bits&lt;8*size; c++) {\n    for(d=0; d&lt;size; d++) {\n      e = buffer&#91;d];\n      e = ((e&amp;0x80)>>7) | ((e&amp;0x7f)&lt;&lt;1);\n      byte = dba_clockbyte();\n      buffer&#91;d] = e^byte;\n      if(prevbyte != byte) {\n        bits++;\n        prevbyte = byte;\n      }\n    }\n    for(d=0; d&lt;size; d++) {\n      f = (f+buffer&#91;d])%size;\n      e = buffer&#91;d];\n      buffer&#91;d] = buffer&#91;f];\n      buffer&#91;f] = e;\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>Ja sitten rutiinit, joilla satunnaismerkkej\u00e4 saa merkki kerrallaan:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define DBA_RESSUCNT 128\n#define DBA_RESSU_CLEAR 2\n\nunsigned char dba_ressu_bytes&#91;DBA_RESSUCNT];\nint dba_ressu_byte = 999999;\nint dba_ressu_cnt = DBA_RESSUCNT;\n\nint dba_ressu_genbyte()\n{\n  if(dba_ressu_byte&gt;=dba_ressu_cnt) {\n#ifdef DBA_RESSU_CLEAR\n    memset(dba_ressu_bytes,0,dba_ressu_cnt);\n#else\n    if(dba_ressu_byte==999999)\n      memset(dba_ressu_bytes,0,dba_ressu_cnt);\n#endif\n    dba_ressu_genbytes(dba_ressu_cnt,dba_ressu_bytes);\n    dba_ressu_byte=0;\n  }\n  return(dba_ressu_bytes&#91;dba_ressu_byte++]);\n}\n\nint dba_ressu_genbyte_limit(int limit)\n{\n  int c;\n\n  while((c = dba_ressu_genbyte())&gt;=\n      (256\/limit)*limit);\n  \/* while((c = fort_random_data_byte())&gt;                                                                                       \n      (256\/limit)*limit); little bug *\/\n  return(c % limit);\n}\n\nvoid dba_ressu_random_clear()\n{\n  memset(dba_ressu_bytes,0,dba_ressu_cnt);\n  dba_ressu_byte=999998;\n}\n<\/code><\/pre>\n\n\n\n<p>Seuraava rutiini arpoo istuntoavaimen merkki kerrallaan:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ 0123456789\n\/\/ abcdefghij\n\/\/ klmnopqrst\n\/\/ uvwxyzABCD\n\/\/ EFGHIJKLMN\n\/\/ OPQRSTUVWX\n\/\/ YZ\n\nvoid dba_gensessionid(int size, unsigned char *buffer)\n{\n  int len,byte,first;\n  unsigned char chars&#91;] =\n    \"0123456789\" \\\n    \"abcdefghijklmnopqrstuvwxyz\" \\\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n  unsigned char *n;\n\n  dba_ressu_random_clear();\n  n=buffer;\n  len=0;\n  first=1;\n  while(++len&lt;size) {\n    if(first)\n      byte=dba_ressu_genbyte_limit(sizeof(chars)-11)+10;\n    else\n      byte=dba_ressu_genbyte_limit(sizeof(chars)-1);\n    *n++=chars&#91;byte];\n    first=0;\n  }\n  *n='\\0';\n  dba_ressu_random_clear();\n}<\/code><\/pre>\n\n\n\n<p>Session id talletetaan kookieksi tulostamalla kookierivi html otsakkeeseen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#define DBS_RENEW_SESSION_HOURS 24\n\nvoid dba_renew_cookie()\n{\n  dbs_html_buf_printf(HTML_HEADER_BUFFER,\"Set-Cookie: sessionid=%s; Max-Age=%d\\r\\n\",\n              htmlsessionid, 3600*DBS_RENEW_SESSION_HOURS);\n}\n<\/code><\/pre>\n\n\n\n<p>Viel\u00e4 pieni p\u00e4\u00e4ohjelma: t\u00e4ss\u00e4 avaimen pituus on 32 merkki\u00e4, viimeinen merkki on &#8216;\\0&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void main()\n{\n  char buffer&#91;33];\n\n  dba_gensessionid(sizeof(buffer),buffer);\n\n  fprintf(stdout,\"%s\\n\",buffer);\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 postissa k\u00e4yn l\u00e4pi tertun ns istuntoavaimen muodostamisen. Istuntoavaimen luomiseen tarvitaan satunnaisbittigeneraattori ja joku sis\u00e4inen malli, jonka mukaan istuntoavain muodostetaan satunnaisbittigeneraattorin antamista biteist\u00e4. Ensin yksinkertainen satunnaisbittigeneraattori ressu: T\u00e4ss\u00e4 k\u00e4ytet\u00e4\u00e4n vain yht\u00e4 l\u00e4hdett\u00e4, ressua. Varmuuden vuoksi kannattaa lis\u00e4t\u00e4 ainakin toinen l\u00e4hde. Ja sitten rutiinit, joilla satunnaismerkkej\u00e4 saa merkki kerrallaan: Seuraava rutiini arpoo istuntoavaimen merkki kerrallaan: Session&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=1499\">Continue reading <span class=\"screen-reader-text\">Istuntoavaimen luominen<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1499"}],"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=1499"}],"version-history":[{"count":13,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1499\/revisions"}],"predecessor-version":[{"id":1521,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1499\/revisions\/1521"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}