Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Kryptaus

Sivun loppuun

jone2712 [25.04.2021 16:09:09]

#

Tässä yksi työprojekteistani. Koodi on vapaasti jaettavana, koska koodin tiedossa olosta ei ole mitään hyötyä mahdollisessa koodinmurtamisessa.

Salasanan pitää olla laakista oikea, yksikin väärä bitti tuottaa avausyrityksessä täyttä mössöä.

Koodi on reaaliaikainen, ja käsittelee 256 bitin frameja kerrallaan.

#include <memory.h>
#include <stdio.h>
#include <conio.h>

/******************************************************************************
* Function: LifeCrypt                                                         *
*                                                                             *
* Use:      Kryptaa tai purkaa datalohkon. Ei saa kutsua suoraan, koska       *
*           luuppi möyhentää salaus- / purkuavaimen käyttökelvottomaksi.      *
*           Kutsu funktioita LifeEncrypt ja LifeDecrypt.                      *
*                                                                             *
*           Rajoitus: Latinalaisen neliön vuoksi datalohkon pituus pitää      *
*                     olla muotoa 2 potenssiin n, ja vähintään 32 tavua       *
*                     pitkä, koska 17 virittää 32*32 kerrannaisneliöt.        *
*                                                                             *
* Input:    char *data on osoitin 32 tavun data-lohkoon.                      *
*           char *key on osoitin 32 tavun = 256 bitin avaimeen.               *
*                                                                             *
* Output:   Salaamaton data kryptataan ja palautetaan samaan data-lohkoon.    *
*           Salattu data puretaan samoin annettuun data-lohkoon.              *
*                                                                             *
* Version:  0.01  09.10.04  JAr (Jouni Aro)  ensimmäinen versio.              *
*                                                                             *
******************************************************************************/
static void LifeCrypt(char *data, char *key)
{
    int i, f;
    long *life;
    long *apu, *upa;
    long BreakUp=0x00L;

    upa=(long*)(key+16);
    apu=life=(long*)key;

    for (i=0; i<32; i++)
    {
        life[0]+=(life[0]>>11)^(life[1]<<17);
        life[1]+=(life[0]<<19)^(life[1]>>13);

        life[0]+=life[2];
        life[1]-=life[3];

        BreakUp+=life[0]^life[1];
        life=life==apu? upa: apu;

        f=(int)(BreakUp>>28)&0x0f;
        data[i] ^= (char)(BreakUp>>f);
        data[i^17]^=(char)(BreakUp>>(8+f));
    }
}

/******************************************************************************
,* Function: LifeEncrypt                                                       *
*                                                                             *
* Use:      Salakoodaa datalohkon.                                            *
*                                                                             *
* Input:    void *block32 on osoitin 32 tavun lohkoon.                        *
*           const void *key32 on osoitin 32 tavun = 256 bitin avaimeen.       *
*                                                                             *
* Output:   Salattu data palautetaan lohkoon block32.                         *
*                                                                             *
* Version:  0.01  09.10.04  JAr  ensimmäinen versio.                          *
*                                                                             *
******************************************************************************/
void LifeEncrypt(void *block32, const void *key32)
{
    char key[32];
    memcpy(key, key32, 32);
    LifeCrypt((char*)block32, key);
}

/******************************************************************************
* Function: LifeDecrypt                                                       *
*                                                                             *
* Use:      Purkaa salakoodatun datalohkon.                                   *
*                                                                             *
* Input:    void *block32 on osoitin 32 tavun salakoodattuun lohkoon.         *
*           const void *key32 on osoitin 32 tavun = 256 bitin avaimeen.       *
*                                                                             *
* Output:   Alkuperäiseksi purettu data palautetaan lohkoon block32.          *
*                                                                             *
* Version:  0.01  09.10.04  JAr  ensimmäinen versio.                          *
*                                                                             *
******************************************************************************/
void LifeDecrypt(void *block32, const void *key32)
{
    LifeEncrypt(block32, key32);
}

int main(void)
{
    const char information[]="TimoAnitaRikuSannaRistoOlliJouni";

    char key[32]=
    {
        0x37, 0x9b, 0x6f, 0x2c, 0x93, 0x1f, 0x74, 0x48,
        0x23, 0x61, 0x31, 0x04, 0x5f, 0xb3, 0xbe, 0x2f,
        0x6c, 0xcb, 0xb1, 0x2d, 0x94, 0xbd, 0x60, 0xac,
        0xd0, 0x3c, 0x3d, 0x07, 0x58, 0xbf, 0xaf, 0xe0,
    };

    char data[32];
    char TextBuf[32+1];
    char CopyOfDataCrypt[32];

    memset(TextBuf, 0, 32+1);
    memcpy(data, information, 32);

    /* Salakoodataan informaatio "TimoAnitaRikuSannaRistoOlliJouni" */
    LifeEncrypt(data, key);
    memcpy(CopyOfDataCrypt, data, 32);

    /* Katsotaan, millaiselta mössöltä salakoodaus näyttää */
    memcpy(TextBuf, data, 32);
    printf("     Salattu informaatio: %s\n", TextBuf);

    /* Korruptoidaan avaimesta yksi bitti */
    key[0] |= (char)8;

    /* Yritetään avata salaus avaimella, joka on yhden bitin päässä oikeasta */
    LifeDecrypt(data, key);

    /* Katsotaan avauksen tulosta */
    memcpy(TextBuf, data, 32);
    printf("    Avausyrityksen tulos: %s\n", TextBuf);

    /* Korjataan tärvelty bitti oikeaksi ja yritetään uudelleen */
    key[0] &= ~(char)8;
    memcpy(data, CopyOfDataCrypt, 32);

    /* Avataan salaus uudestaan presiis oikealla avaimella */
    LifeDecrypt(data, key);

    /* Ja nyt pitäisi tulostua alkuperäinen informaatio */
    memcpy(TextBuf, data, 32);
    printf("Alkuperäinen informaatio: %s\n", TextBuf);

    getch();
    return 0;
}

The Alchemist [25.04.2021 16:26:36]

#

Tietoturvan nyrkkisääntö on ettei omia salausalgoritmeja saa ikinä käyttää. Valitse aina yleinen algoritmi (ja implementaatio!), jonka turvallisuus ja luotettavuus tunnetaan läpikohtaisesti.

Olisi siis kiva kuulla, mikä motivoi sinua henkilökohtaisesti kirjoittamaan tämän koodinpätkän. Se voisi avata muillekin sitä, millä silmällä esimerkkiä kannattaa katsoa.

jone2712 [25.04.2021 17:27:34]

#

Koodi on vapaa, kuka tahansa voi lukea koodin, ei paljon auta salaamisen purkamisessa, koska pitäisi tietää salasana täsmälleen 256-bitin tarkkuudella.

Ymmärrätkö, että algoritmeja voi tutkia, ja todeta, että ei avaudu ilman oikeaa salasanaa.

Bitcoineja louhivat salasanojen purkamisella.

carabia [25.04.2021 17:50:59]

#

"Koodi on vapaa" argumentti toki pätee näihin muutaman kymmenen rivin kuriositeetteihin jollain "tsiigaa, siistii!1" motivaatiolla. Mutta loppupeleissä tuotannon kryptausalgot tulee integroitua johkin open/libre/neo/ihansamamikävittu -ssl monstereihin, ja sen jälkeen kuinka monen luulet palkatta rouhivan jotain sataa tuhatta soodiriviä palkatta, jne?

Metabolix [01.05.2021 00:51:44]

#

Älkää ottako mallia! Salausalgoritmi on selvästi heikko. Jos hyökkääjä saa selville edes yhden syötteen ja tulosteen, hyökkääjä pystyy sen jälkeen salaamaan ja purkamaan mitä tahansa kyseisellä avaimella, vaikka ei tietäisi alkuperäistä avainta. Vieläpä ei tarvitse saada edes yhtä kokonaista syötettä ja tulostetta, kunhan saa kertaalleen jokaisen bitin. Tämä johtuu siitä, että tosiasiassa algoritmi vain tuottaa annetusta avaimesta uuden avaimen, joka xorrataan datan kanssa.

Annan konkreettisen esimerkin suoraan edellä esitetystä koodista.

syöte:
00000000  54 69 6d 6f 41 6e 69 74  61 52 69 6b 75 53 61 6e  |TimoAnitaRikuSan|
00000010  6e 61 52 69 73 74 6f 4f  6c 6c 69 4a 6f 75 6e 69  |naRistoOlliJouni|

tulos:
00000000  e5 66 32 c9 1b 72 2d 68  9b 53 9b 64 9c 9e 99 14  |.f2..r-h.S.d....|
00000010  9a e4 bb ce 64 d5 ab 65  16 a6 39 8a 04 d7 d3 6b  |....d..e..9....c|

väliavain = syöte xor tulos:
00000000  b1 0f 5f a6 5a 1c 44 1c  fa 01 f2 0f e9 cd f8 7a  |.._.Z.D........z|
00000010  f4 85 e9 a7 17 a1 c4 2a  7a ca 50 c0 6b a2 bd 02  |.......*z.P.k...|

salainen viesti:
00000000  db 60 31 c3 68 2b 75 2e  da 6e 9c 2f 84 a2 93 1b  |.`1.h+u..n./....|
00000010  9d e9 85 d2 63 81 b7 4b  16 ab 25 ab 18 c7 d3 23  |....c..K..%....#|

salainen viesti xor väliavain:
00000000  6a 6f 6e 65 32 37 31 32  20 6f 6e 20 6d 6f 6b 61  |jone2712 on moka|
00000010  69 6c 6c 75 74 20 73 61  6c 61 75 6b 73 65 6e 21  |illut salauksen!|

Lisäksi avaimen pyörittelyssä on pahoja puutteita alkaen siitä, että jos avaimena on pelkkää nollaa, mitään salausta ei tapahdu.

Kryptografia on syytä jättää alan todellisille osaajille. Esimerkiksi Chacha20 on koodiltaan lähes yhtä yksinkertainen mutta oikeasti toimii.

Tekniikan puolesta koodi on taas vaihteeksi näitä rikkinäisiä 16-bittisen aikakauden koodeja. Monissa järjestelmissä long on 64-bittinen, jolloin koodi toimii väärin. Tarkoissa asioissa kannattaa käyttää tarkkoja tyyppejä, stdint.h:sta löytyy esimerkiksi int32_t.

jone2712 [01.05.2021 07:07:40]

#

Onko teillä jokin täppä päällä, jotta en voi poistaa koodejani. Alkaa vituttamaan tällainen ainainen purnaus, että "Ei ole hyvä! Älkää käyttäkö tätä ja tätä koodia!". Tuo kryptaus algoritmi on toteutettu tasan 16-bittisessä sulautetussa järjestelmässä.

Ei paljon valaise, jos 0-frame on nolla vielä kryptauksen jälkeenkin. Todella typerää väittää, että 0-blokki sisältäisi jotain oleellista informaatiota?

Poistakaa tämä koodi saatana!

Grez [01.05.2021 07:54:12]

#

jone2712 kirjoitti:

Tässä yksi työprojekteistani. Koodi on vapaasti jaettavana, koska koodin tiedossa olosta ei ole mitään hyötyä mahdollisessa koodinmurtamisessa.

No mutta vaikka olitkin väärässä, niin onhan tästä se hyöty että sait selville että työprojektissasi käyttämäsi salaus on täysin tietoturvaton ja ehdit toivottavasti vielä vaihtaa tilalle jonkin kunnollisen.

Itsekin olen työhommissa törmännyt tilanteeseen jossa sulautetun järjestelmän koodarit on kehitelleet jonkun oman purkkavirityssalauksen ja sitten olen joutunut heitä valistamaan. Huvittavasti vielä vaikka olen selittänyt mikä on vialla niin ei ole mennyt jakeluun - vasta kun olen tehnyt työkalun jolla demonstroin erilaisia hyökkäyksiä niin on ymmärretty että se ei tosiaan toimi.

Nämä tapaukset tosiaan perustelevat hyvin tämän perinteisen ohjeen:
Älä koskaan kehitä omaa salausalgoritmia omaan tuotteeseen.

jone2712 [01.05.2021 08:20:13]

#

Grez kirjoitti:

(01.05.2021 07:54:12): ”– –” No mutta vaikka olitkin väärässä, niin onhan...

Metabolixilla on tapana aina alapeukuttaa mitä tahansa sovellusta (narsisti?) täällä julkaisee. Tuo kryptausalgoritmi toimii vähän paremmin, kuin metabolix antaa ymmärtää.

Tämä koodi on toteutettu YTV:n järjestelmissä. Kryptausalgoritmilla oli muutaman sadan kellojakson aika. Siis aikakriittinen koodi.

jone2712 [01.05.2021 10:53:39]

#

POISTAKAA TÄMÄ VIESTIKETJU MAHDOLLISIMMAN NOPEASTI!
POISTAKAA TÄMÄ VIESTIKETJU MAHDOLLISIMMAN NOPEASTI!
POISTAKAA TÄMÄ VIESTIKETJU MAHDOLLISIMMAN NOPEASTI!

Jere Sumell [01.05.2021 11:13:03]

#

jone2712 kirjoitti:

POISTAKEASTI!
POISTAKAA TÄMÄ VIESTIKETJU MAHDOLLISIMMAN NOPEASTI!

Mitä hyötyä poistamisesta olisi, kun olet jo julkaissut tämän ja avannut tämän viestiketjun? Internet on suuri arkisto, ja Internet Archiven kautta saa tämän viestin varmaan, ja itsekin olen ottanut varmuuskopion profiilisi teksteistä, niin mikään häviä mihinkään, mitä kerran julkaisee netissä.

Työllisyyspolitiikka seuraavaksi, miten pääsit töihin ohjelmistofirmaan, jollet ymmärrä edes pysyviä värejä netissä? Itselleni haastetta tuottaa mitätön työkokemus IT-alalta, vaikka nyt jotain hommia on ollut AMK-opintojen valmistumisen jälkeen, mutta hain tieto-ja -kirjastopalvelualan korkeakouludiplomi -täydennyskoulutukseen pysyvistä väreistä niin netissä, kuin oikeassa elämässäkin pitävänä, jos vaikka leipäpuu aukeaisi vuoden täydennyskoulutuksen jälkeen joko julkisella sektorilla tai miksei yksityiselläkin sektorilla informaatikkona, tai vaikka aluekirjaston hoitajana?

Työllistyminen vaikeaa nykyään, miten pääsit töihin ohjelmistofirmaan, ihmettelen?

jalski [01.05.2021 11:44:18]

#

Jere Sumell kirjoitti:

... ja itsekin olen ottanut varmuuskopion profiilisi teksteistä, niin mikään häviä mihinkään, mitä kerran julkaisee netissä.

Mksi ihmeessä varmuuskopioisit foorumilta viestejä? :D Nyt ihmiset oikeasti vaatteet päälle, ulos ulkoilemaan, urheilemaan ja vapun viettoon!

Jere Sumell [01.05.2021 12:26:52]

#

jalski kirjoitti:

Mksi ihmeessä varmuuskopioisit foorumilta viestejä? :D Nyt ihmiset oikeasti vaatteet päälle, ulos ulkoilemaan, urheilemaan ja vapun viettoon!

En mä sitä kopioinut kunhan vappupäivän vappupäivän aamuoluiden jälkeen loin lisää painetta, "painetta pitää luoda ostavaan osapuoleen", jos jotain aikoo myydä. En ole myymässä mitään, annan nämä seuraavat sanat ihan ilmaiseksi kaikille koko maailma nähkööt mut alasti näiden seuravien sanojen edessä:

Tää on melkein real-time -conversisaton ni siihen otin kantaa, mitä lähtee julkaisemaan mitään nettiin, jonka takana ei pysty 100% -sataprosenttisesti seisomaa myös reaalielämässä. Vähän voi noloja tilanteita tulla joskus reaalielämässä ton nettikäyttäytymisen jälkeen?

En mä näitä kopioinut, kun Amerikasn Yhdysvalloissa sellainen instanssi, joka vetää Internet Archivea, niin siitä käsitin, että mitä ainakin kerran ois hienoa päästä käymään jenkeissä elinakanani ja tekniikan maisterin tutkinnon vähintään suorittaneena, että tänne nettiin nyt voi mitä tahansa paskaa suoltaa vaikka kuinka olisi töissä, itse olen unohtanut jo työnteon tässä maailmassa, tehdään ne akateemisen tekniikan nimeomaan tietotekniikassa näin kun mahdollisuus aukeni, niin ensin loppuun.

En vedä jenkkimatkaa Juppe Pupteiks, vaikka kuinka joku perustais "JupexSoft", ohjelmistkehittäjänä.

Mulla kesti 16 vuotta akateemiset tietojenkäsittelyn perusopinnot, mut loput ei kestä enää 5 vuotta / tutkintoaste,, olen siitä jo vetänyt alkuboostin, ni mitä punkista pidän helvetisti nykyään ja Pella Miljoonasta, ni nyt mennään loppuun saakka.

noutti [01.05.2021 21:18:23]

#

Tämä on lempiketjuni tällä foorumilla

jone2712 [02.05.2021 00:57:04]

#

HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!
HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!

carabia [02.05.2021 03:40:25]

#

Mikä nyt tuli? Tämä ketju on täyttä voittoa, tallensin sivun myös omalle tiato koneelle varmuuden vuoksi, jotta voi jaella eteenpäin.

Metabolix [02.05.2021 11:05:41]

#

jone2712 kirjoitti:

HEIVATKAA VATTUUN TÄMÄ VIESTIKETJU!!!

Viestiketju pysyy. Sillä on arvoa esimerkkinä siitä, millaisia ongelmia itse tehtyyn salaukseen liittyy ja miten salausta voi yksinkertaisesti lähteä analysoimaan. Siinä on muidenkin kuin sinun tekstiäsi, ja kokonaisuus ei säily ymmärrettävänä ilman kaikkia viestejä. Näin ollen viestiketju säilytetään (säädösten sanamuotoja mukaillen) sananvapauden ja tiedonvälityksen vapauden perusteella ja yleisen edun mukaisia arkistointitarkoituksia varten.

Muutenkaan maailma ei toimi niin, että mitä tahansa voi huudella ja sitten voi vain pyyhkiä jäljet, kun lopputulos ei miellytä.

Jos algoritmisi ”toimii vähän paremmin, kuin metabolix antaa ymmärtää”, niin silloin ei pitäisi olla mitään hätää. Lyöt vain todisteet pöytään ja osoitat väitteeni vääräksi. Helppo homma! Ei se koodi muutu paremmaksi ainakaan sillä, että haukut minua narsistiksi. Ehkä kannattaa myös katsoa peiliin sen sanan kohdalla.

jone2712 kirjoitti:

Tuo kryptausalgoritmi toimii vähän paremmin, kuin metabolix antaa ymmärtää.

Mitään en ”anna ymmärtää”, vaan kerroin selvän faktan, mikä on pielessä.

Esittelen ongelman vielä koodin muodossa. Tässä siis käytetään yllä antamaasi LifeEncrypt-funktiota, jolla salataan kaksi merkkijonoa. Hakkeri saa ensimmäisen tiedon selvänä ja salattuna ja toisen tiedon vain salattuna, ja näiden perusteella hakkeri pystyy purkamaan toisen yksinkertaisella xorilla.

#include <string>
#include <stdio.h>

struct data {
    char s[32];
};

std::string bin2hex(data bin) {
    char hex[97];
    for (int i = 0; i < 32; ++i) {
        sprintf(hex + 3 * i, "%02x ", (int) (unsigned char) bin.s[i]);
    }
    return hex;
}

std::string bin2print(data bin) {
    char printable[33] = {0};
    for (int i = 0; i < 32; ++i) {
        printable[i] = isprint(bin.s[i]) ? bin.s[i] : '.';
    }
    return printable;
}

data hakkeri(data src1, data dest1, data hax) {
    for (int i = 0; i < 32; ++i) {
        hax.s[i] ^= src1.s[i] ^ dest1.s[i];
    }
    return hax;
}

int main(void)
{
    unsigned char key[32] = {
        0x37, 0x9b, 0x6f, 0x2c, 0x93, 0x1f, 0x74, 0x48,
        0x23, 0x61, 0x31, 0x04, 0x5f, 0xb3, 0xbe, 0x2f,
        0x6c, 0xcb, 0xb1, 0x2d, 0x94, 0xbd, 0x60, 0xac,
        0xd0, 0x3c, 0x3d, 0x07, 0x58, 0xbf, 0xaf, 0xe0,
    };

    data src1 {"Olli otti oluen."};
    data src2 {"Jeppe juo ja pelaa."};
    data dest1(src1);
    data dest2(src2);

    LifeEncrypt(dest1.s, key);
    LifeEncrypt(dest2.s, key);

    printf(
        "src1:  %s\n       %s\n\ndest1: %s\n       %s\n\n"
        "src2:  %s\n       %s\n\ndest2: %s\n       %s\n\n",
        bin2hex(src1).c_str(), bin2print(src1).c_str(), bin2hex(dest1).c_str(), bin2print(dest1).c_str(),
        bin2hex(src2).c_str(), bin2print(src2).c_str(), bin2hex(dest2).c_str(), bin2print(dest2).c_str()
    );

    data hax = hakkeri(src1, dest1, dest2);
    printf("data hax = hakkeri(src1, dest1, dest2);\n");
    printf("hax:   %s\n       %s\n\n", bin2hex(hax).c_str(), bin2print(hax).c_str());
    printf("Huomaa, että hax on sama kuin src2 ja ei tarvittu salausavainta!\n");

    printf("\nEnter lopettaa.\n"); getchar();
}

Tässä on vielä koodin tuloste:

src1:  4f 6c 6c 69 20 6f 74 74 69 20 6f 6c 75 65 6e 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       Olli otti oluen.................

dest1: fe 63 33 cf 7a 73 30 68 93 21 9d 63 9c a8 96 54 f4 85 e9 a7 17 a1 c4 2a 7a ca 50 c0 6b a2 bd 02
       .c3.zs0h.!.c...T.......*z.P.k...

src2:  4a 65 70 70 65 20 6a 75 6f 20 6a 61 20 70 65 6c 61 61 2e 00 00 00 00 00 00 00 00 00 00 00 00 00
       Jeppe juo ja pelaa..............

dest2: fb 6a 2f d6 3f 3c 2e 69 95 21 98 6e c9 bd 9d 16 95 e4 c7 a7 17 a1 c4 2a 7a ca 50 c0 6b a2 bd 02
       .j/.?<.i.!.n...........*z.P.k...

data hax = hakkeri(src1, dest1, dest2);
hax:   4a 65 70 70 65 20 6a 75 6f 20 6a 61 20 70 65 6c 61 61 2e 00 00 00 00 00 00 00 00 00 00 00 00 00
       Jeppe juo ja pelaa..............

Huomaa, että hax on sama kuin src2 ja ei tarvittu salausavainta!

Neutrino [16.05.2021 16:49:12]

#

Tämä näyttää olevan "Koodit näytille" -keskustelupalsta ja hyvää keskustelua hyvästä aiheesta edellä on käytykin.

Lähinnä vain keskustelun sävy minua ihmetyttää. Ehkä joidenkin kirjoittajien tarkoitus on lannistaa koodinsa näytille asettavan into, nostaa kynnystä tuoda koodiaan näytille tällä palstalla ja näivettää kaikenlainen keskustelu jo ennen kuin se ehtii alkaakaan. En kyllä ymmärrä mitä tarkoitusta se palvelisi ja miksi vaivautua. Mutta ihmiset ovat erilaisia, jokaista ei voi ymmärtää ja tuskin siihen on tarvettakaan.

Silti meidän kommentoijien on syytä muistaa pysyä asiassa ja pidättäytyä menemästä henkilökohtaisuuksiin. Esimerkiksi salausalgoritmi voi olla tietoturvaton ja jopa heikko, mutta ei sitä pidä koodinsa näytille asettaneen viaksi lukea. Paitsi jos odotus on, että näytille sopii nostaa vain AES:n korvaaja.

Esitetyn salausalgoritmin heikkoudet tulivat keskustelussa hyvin esiin. Muutaman täydentävän kommentin vielä esitän:

Yleensä salausalgoritmi valitaan tilanteen ja tarpeen mukaan. Jos aikaa on rajallisesti, AES-koodia ei ehkä ole edes mahdollista ajaa ilman rautatukea. Yksinkertainenkin salaus on jossain tilanteessa parempi kuin ei salausta lainkaan.

Yksinkertainenkin salaus on tietyt reunaehdot huomioiden vaikeaa purkaa. Esimerkiksi varsin yksinkertaiseen Zodiac-koodin murtamiseen kului 50 vuotta, vaikka yrittäjiä riitti pilvin pimein huippututkijoista alkaen.

Yksinkertainen xor-salaus on murtamaton, kunhan avain on vähintäin salattavan viestin mittainen ja kertakäyttöinen.

Allekirjoitan ohjeen "älä koskaan kehitä omaa salausalgoritmia omaan tuotteeseen" varauksin.

Omaa koodia kannattaa aina kehittää oppimis- ja tutkimistarkoituksessa, jollei muuten.

The Alchemist [21.05.2021 05:35:52]

#

Neutrino kirjoitti:

Silti meidän kommentoijien on syytä muistaa pysyä asiassa ja pidättäytyä menemästä henkilökohtaisuuksiin. Esimerkiksi salausalgoritmi voi olla tietoturvaton ja jopa heikko, mutta ei sitä pidä koodinsa näytille asettaneen viaksi lukea. Paitsi jos odotus on, että näytille sopii nostaa vain AES:n korvaaja.

[--]

Yksinkertainen xor-salaus on murtamaton, kunhan avain on vähintäin salattavan viestin mittainen ja kertakäyttöinen.

Minähän kysyin ensimmäisessä vastauksessa juuri sitä, missä mielessä AP tämän nerokkaan keksintönsä laittoi esille. Vastaukseksi tuli vain jotain epämääräistä kuittailua. Jos hän olisi sen sijaan selväsanaisesti ilmoittanut, millä reunaehdoilla salausta voi käyttää jne. niin luultavasti kenenkään ei olisi tarvinnut vetää herneitä nenään.

Suurinta osaa ärsytti selvästi se, ettei AP ymmärtänyt mitään tekemästään algoritmista. Se on mahdollisesti vain kopioitu jostain.

Neutrino kirjoitti:

Yleensä salausalgoritmi valitaan tilanteen ja tarpeen mukaan. Jos aikaa on rajallisesti, AES-koodia ei ehkä ole edes mahdollista ajaa ilman rautatukea. Yksinkertainenkin salaus on jossain tilanteessa parempi kuin ei salausta lainkaan.

No kuinka yksinkertainen tämä salausmenetelmä lopulta on? Salausavaimen tulee olla täsmälleen yhtä pitkä kuin salattavan tiedonkin, eli megatavun kokoisen tietomäärän salaamiseen tarvitaan megatavun kokoinen salausavain, ja gigatavun tiedostolle gigatavun kokoinen avain.

Salausavaimen generointikin syö CPU-aikaa vaikka sen tekisi kuinka yksinkertaisin menetelmin tahansa. Tällaisten avainten säilyttäminen on hyvin epäkäytännöllistä ja suurilla tietomäärillä luultavasti mahdotonta.

Jos näistä vaatimuksista aletaan tinkiä, niin onko mitään järkeä edes tehdä salausmenetelmää, joka vaatii epäkäytännöllisen salausavaimen käyttöä? Avainhan on täysin merkityksetön, jos sitä on käytetty väärin. Käytetään sitten laskennallisesti mahdollisimman kevyttä algoritmia, joka ei vaadi erillistä avainta tiedon palauttamiseksi alkuperäiseen muotoon.

AES on nimenomaan suunniteltu toimimaan matalilla laitteistovaatimuksilla; se toimii jopa 8-bittisillä suorittimilla. Mikäli suorituskyky ei kuitenkaan ole riittävä, niin Wikipedian mukaan yleinen valinta on silloin ChaCha20, joka tarjoaa vieläkin parempaa suorituskykyä tinkimättä tietoturvasta.

Neutrino kirjoitti:

Yksinkertainenkin salaus on tietyt reunaehdot huomioiden vaikeaa purkaa. Esimerkiksi varsin yksinkertaiseen Zodiac-koodin murtamiseen kului 50 vuotta, vaikka yrittäjiä riitti pilvin pimein huippututkijoista alkaen.

Viitannet Zodiac-tappajan yhteen tiettyyn kirjeeseen, joka saatiin purettua selkokieliseksi viime vuoden lopulla. Kirje ja kyseinen salausmenetelmä tunnetaan nimellä 340 cipher.

Viestin purkamisen vaikeus perustui nimenomaan siihen, että salausalgoritmia ei tunnettu. Merkittävin kynnyskivi vaikuttaa olleen se, että salausmenetelmä ei ollutkaan täysin säännönmukainen, vaan yhden merkin kohdalla oli poikkeama (merkki oli kirjoitettu eri kohtaan matriisia kuin mihin se olisi yleisen odotusarvon mukaan tullut sijoittaa), mikä luonnollisesti sotkee dekryptaamisen siitä eteenpäin kokonaan, tuottaen pelkkää tekstiroskaa.

Yleisesti ottaen kryptografiassa algoritmin pitäminen salaisuutena ei saa olla kriteeri salauksen luotettavuudelle.

Grez [21.05.2021 08:38:12]

#

The Alchemist kirjoitti:

Yleisesti ottaen kryptografiassa algoritmin pitäminen salaisuutena ei saa olla kriteeri salauksen luotettavuudelle.

Tai ainakin täytyy olla tiukat reunaehdot. Sinänsähän jos ei pysty pitämään salaisuutena salausavainta, niin salauksen voi purkaa. Jos haluaa käyttää algoritmin salaisuutta hyväkseen, niin täytyy sitten myös huolehtia siitä yhtä hyvin kuin salausavaimesta.

Käytännössä tietenkin algoritmia on tarkoitus käyttää useassa instanssissa kun taas avain voi olla instanssikohtainen. Näin ollen on käytännössä aina järkevää perustaa salaus muuhun kuin algoritmin salassapysymiseen.

Metabolix [21.05.2021 12:03:36]

#

Neutrino kirjoitti:

Ehkä joidenkin kirjoittajien tarkoitus on lannistaa koodinsa näytille asettavan into,

Kannustava palaute on tietysti yleensä kannatettavaa. Sitä myös saa, jos on rehellisesti äskettäin tehnyt koodin hyvässä uskossa ja on valmis ottamaan palautetta vastaan.

Harmi, että tästä nimenomaisesta keskustelusta jää tympeä kuva. Koetan kuitenkin avata asiaa hieman.

Jonen tilanne on poikkeuksellinen. Hän on eri nimimerkeillä ja sivustoilla (ainakin Ohjelmointiputka ja Tiede.fi) esitellyt samoja viallisia ideoita (erityisesti ”moniulotteinen algebra” ja virheelliset käsitykset satunnaisluvuista) jo parikymmentä vuotta. Kokemus on osoittanut, että hän uskoo sokeasti asiaansa täysin ja palaute ei johda keskusteluun ja kehittymiseen vaan riitelyyn ja ongelmien kiistämiseen.

Tässäkin kryptauskoodissa päiväys viittaa vuoteen 2004, ja koodi on itse asiassa lähetetty Tiede.fi:n keskusteluihin ainakin v. 2011 ja 2013 (hae LifeCrypt). Olisi ollut kymmenen vuotta aikaa tutkia ja parantaa koodia, mutta ei.

Yleensä kannustaminen on hyväksi, mutta jos vastapuoli ei korvaansa lotkauta, ei tunnu mielekkäältä kirjoittaa vuosikymmenestä toiseen kannustavaa ja innostavaa palautetta. Varsinkaan samojen rikkinäisten koodien toistuvaan lähettämiseen eri foorumeille ei ole syytä ketään kannustaa.

Onneksi tämä salausalgoritmi on nyt käsitelty tälläkin sivustolla ja voi siirtyä historian hämäriin.

Tietysti olisi hauska nähdä analyysi siitä, millaisen todellisen xor-avaimen tämä algoritmi tuottaa eli onko tuossa vielä muita heikkouksia, onko esimerkiksi avainten törmäyksen mahdollisuus sittenkin olemassa.

Neutrino [23.05.2021 19:10:26]

#

Kiitän kommenteista edelliseen kirjoitukseeni.

Metabolix, taustoitit hyvin viestiketjun aloittajan tilannetta. Tällainen historia on tietenkin syytä nostaa esiin kaikkien lukijoiden tietoon. Mieluummin niin kuin että keskustelusta pääsee syntymään tympeä kuva.

The Alchemist ja Grez, asia on kuten kirjoitin, salausalgoritmi tulee valita tilanteen ja tarpeen mukaan. Netissä ja PC-ympäristössä vaatimukset ovat todennäköisesti aivan toiset kuin vaikkapa pienessä sulautetussa laitteessa tai jossakin vähäisessä protokollassa. Nämä jälkimmäiset liittyvät työhöni, joten kerron esimerkin.

Sulautetun laitteen koodi on sata kilotavua. Koodi on salattava, jotta se voidaan laittaa vapaaseen jakeluun ja päivitettäväksi laitteisiin. Laitteen vanha softa purkaa salauksen ja päivittää koodimuistin. Salaamaton koodi sekä salausalgoritmi löytyvät siis vain valmistajalta ja mikrokontrollerin sisältä.

LCG lienee helpoin tapa tuottaa pitkä salausavain. 32-bittinen siemenluku riittää tuottamaan kertakäyttöisen salausavaimen tässä tapauksessa yli 40000 päivitykseen. Käytännössä LCG ei yksinään riitä, koska salaamaton koodi saattaa muuttua päivitysten välillä vain vähän, mutta siitä toisella kertaa. Isommassa mittakaavassa LCG olisi tottakai kelvoton salausalgoritmi ja minäkin kallistuisin esimerkiksi ChaCha20 kannalle.

Haluan demota äärimmäisen yksinkertaisen xor-salauksen merkityksen, joten kirjoitin muutaman rivin ohjelman, joka salaa netistä kopsaamastani tekstistä 2000 ensimmäistä merkkiä. Tekstissä on ääkkösiä ym. erikoismerkkejä, joten kaikki kahdeksan bittiä ovat käytössä. Poistin melkein kaikki välilyönnit, teksti on enimmäkseen CamelCase, mutta on vaivatta luettavaa edelleen. Alla salattu koodi vasemmalta oikealle ja ylhäältä alas, ilman mitään temppuja.

Koska tällä demoamisella voi olla minulle myös ammatillista arvoa, toimitan sadan euron Prisman tms. lahjakortin hänelle, joka ensimmäisenä tällä palstalla osoittaa murtaneensa salauksen ja kertoo miten se tapahtui ja millaisin ponnistuksin. Lahjan vastaanottaja vastaa mahdollisista veroseuraamuksista.

52 D1 9B CD FA A9 B7 19 87 73 41 36 62 1F 3C 83 3F 79 98 21
77 4F 47 DC 52 98 A2 AB 34 E0 03 5D 5D E7 47 9C 38 2D 63 78
99 24 C4 C1 5E 98 58 2B 8F 70 D0 3D 20 41 C4 B5 37 EE D7 9C
AD C9 CC 59 2A C0 08 7D 8B 76 68 0F 01 AC 7B 92 74 AF 53 1A
41 14 C1 56 3C B4 F4 C8 30 C2 A8 D9 69 EC 18 F3 D8 F3 45 1D
1C C3 BE DF 7D 28 25 50 90 A7 C2 E5 5A 9E 7C 4F E1 E3 79 1C
EE 8E 69 C8 FC CC 9A 88 97 BE 84 9A 1C CF 3F 1D 40 4F 39 9B
32 40 01 42 C2 60 F7 3E 95 AD 97 67 C3 EB 2D 30 43 11 86 94
AA 25 D4 03 1E 0E E4 65 28 A9 57 D7 87 F7 D6 BF 07 05 03 89
F7 30 80 A8 67 C5 7A 6C BC EE A9 75 92 54 C5 69 BB 54 FD 0A
99 44 8C 88 EE 1A 49 60 A3 A7 A3 1B 09 19 28 52 41 41 08 D8
10 28 89 7A 8C 28 78 EE 30 AA 3E AC EA A8 3A B8 2F 3E 25 46
84 FA 59 55 CC DC BB C0 DC 91 1C 22 3A 1C 7E DC 43 D2 94 F9
25 5D DD E8 8A 80 C7 A3 51 E8 15 A4 F1 8B A5 A5 11 04 CC 85
B2 08 76 91 3D 50 E4 BC 1D 8B 4F 2F 7E CF 75 38 7B 12 C2 A2
7B 50 27 F3 8B 5E 81 D8 1B 12 26 C7 30 46 E2 E6 2B 5E 8E 2F
58 00 0C 3F 04 5D 5A 1B 66 0D DB B2 DD BC 38 AD 09 8E 1B 6D
72 87 79 70 EE 06 2A 82 E2 D4 C2 05 F7 A6 E3 5C 9D 4B BC 38
A9 7D 2A 8D 31 CB 90 69 7A 94 30 E0 79 E1 C3 40 74 B9 9D 11
94 95 50 8E EB 1A 0A 0A F9 E6 C8 49 51 E6 64 08 32 9D F0 AC
92 2F CB ED 8C BC D0 94 0E 74 B9 B4 4D D9 42 57 08 A7 B1 08
3B 95 DA 8C C7 FA AF 19 B3 23 AE DE 98 8B CE A7 B9 5E 3B 82
6B 1E EF A0 C1 C8 6B E8 80 D8 3C AF E3 19 A1 6F FE 33 EE 5E
92 66 90 8F EA 95 AA CD E0 4E A6 39 19 18 FC 18 6D 10 23 AE
8C 7C 22 AF AA 0A 1E 60 F7 84 55 A9 A9 AA F5 3D 23 79 DE 22
05 79 E2 98 43 DF 2B A8 91 36 10 10 39 81 5B F3 1E CE 4A 9F
4D 8B 08 49 03 6A 81 CD 82 D1 CD D2 8F 9B 07 23 CA F8 F8 91
16 68 AA DA 92 FA 15 90 63 B8 24 A3 C7 A6 AD 3F 7F 22 CE 47
E1 02 17 5E 9C A9 9B C5 3F FF EA 05 07 8B 50 4E AC 07 F0 FA
5B 0D 5B 57 AD 76 F0 97 1C 73 CC 05 B9 DB 12 7E AC 57 A7 B8
88 17 BF 3D 5F B5 B8 F6 F9 5A 1E 6E 2C BF 56 7C 93 34 D3 0A
BD D0 00 AE 23 AC 98 33 7C D4 3C ED D2 5B 92 DC 2E F0 F3 DB
91 40 3A BA B9 DC 9D 78 CC 7C AF C4 3F 86 66 D7 20 B0 AB 78
E9 84 3E A8 3D B4 92 15 2E 6E F5 E5 62 75 4E F2 11 3A 88 6F
4E D6 E9 1A A6 48 0D D8 C2 83 BE A5 0A 4B 8C 91 4D E4 E7 EF
C0 52 1C 5C DC 4F 5D C1 09 34 42 BA B6 DB 24 8C CD B1 87 0F
E2 DE B2 53 C8 72 A7 5E 99 B8 5E 3F 8B EF CA C6 60 61 C1 EA
04 70 90 01 C2 DA BB 24 19 15 6B F2 CC D6 21 F9 06 71 17 1A
87 FC E4 E8 1A 30 17 30 8F 23 6B D2 A0 25 E8 E6 EF 98 22 46
B4 EA 3B F4 EE AC AD D3 87 F3 15 B7 D2 AD 0B 34 AF 79 12 D5
DA 30 86 D2 5A CA D6 11 38 25 39 86 2B AE 73 F5 1E 80 50 A6
2E 31 97 B3 C7 18 A5 58 EF F3 9C 03 BA C8 E2 65 4A 6E 8F B7
D0 60 3E 42 8B 0B 7C 49 8E F6 FD EF E3 C9 B6 F0 15 12 F8 A9
7A 1E FE AD 83 A4 8E 54 41 3F E0 70 60 FA 4E 04 EA 76 BE DF
CC 27 D4 21 5F 57 06 7F DD D0 52 A1 73 70 5E CB 0F 51 79 CF
1B 62 21 D0 61 CA BA F4 0A 68 8F 8B 7D F8 7E EF 16 4B 12 6A
17 D6 78 2B A4 A2 54 4D B8 27 D2 62 C0 FC 0E 22 89 DF 5B FF
A3 7D 69 A8 DD B2 79 79 9D 2A 84 07 C4 BA AE 4E 87 F1 6B 90
70 89 5D C8 42 32 CE 46 09 79 EF A6 AE A4 EE 0A BF FB 24 7E
4B 7C B9 6F F1 FC E4 D2 8D 69 0A 32 05 33 4D 16 1E 17 66 5E
6B E8 1A AE 26 13 D9 7C 5C ED 5E E5 E4 9C 03 64 A0 55 80 35
4C B6 D1 24 D0 B0 4B 6A 0B 71 59 A5 7D 2F 01 06 1E 0B 56 58
2A 61 33 CF F3 1C 38 E2 B6 2C 59 D5 00 39 7D 85 E6 2C D7 4E
F3 08 26 33 7E 92 90 FD A0 1E 89 0F 1A F3 75 C5 61 5B 18 07
4B 51 50 3C B5 96 CA 00 71 70 A1 C5 24 D9 1B BB A1 33 CB C8
ED 80 95 51 29 C9 9F 8E 6D 39 26 BE 59 CA 3F 4C 60 0C 3C 15
22 EC F2 E1 8A 81 53 36 28 43 AA 31 76 18 F8 BC 08 B3 43 07
31 CA F8 31 FE 1F E8 4E B1 DB 8F 2E 48 11 30 DF 69 F7 8B 7D
F9 C2 7F AC 6D 1C 1E 73 99 1B 1A 45 D7 F0 16 EB A3 B1 53 0B
1A E8 77 80 B5 8E 90 D9 70 87 67 C8 A6 68 AD 61 9C 1C B4 56
AA 7A 6C C5 A1 C4 7A A6 74 2B 22 BC 3E 4B BF 8A 9E 80 17 90
CD A4 09 9F D4 B8 92 B8 68 9E 23 9F 28 14 A2 5F D7 79 4F AB
01 E5 6A 98 58 45 07 EB 99 F0 9F 60 5E 2A 7C A5 32 E2 47 0F
09 09 C0 AB 86 E0 42 8B 90 68 FF 8A 90 92 09 22 78 2A 21 F2
3C EA 38 F2 54 05 99 CC B8 8E D7 EC 25 33 83 7D 59 E5 AE 25
9B 72 E8 E2 58 7B 06 26 67 C4 90 2B E7 1B 3D 8B 6B 12 71 08
53 AC AD D8 08 20 A6 2B E5 1C 79 D9 74 60 2C E4 A3 2A D4 ED
30 2D 0F 3D 05 E6 04 DE F6 E9 2D 7E 77 02 97 31 D1 E2 89 46
A1 98 E1 CD AF 46 56 71 6F 54 E0 F4 1B EA 5B 79 4C 1C 06 54
9D DE 60 F0 61 BC DA 96 D7 77 C0 E9 67 05 AD DD 84 0A AC 97
37 30 2A BD 82 45 BD 46 6B E1 C1 B3 BF 40 A7 E4 E0 D7 00 95
5F 65 0B 0B 76 1D 71 09 B5 50 A1 73 05 7C 34 FC 51 F9 63 A0
6A DB 0A 01 C1 CA 69 09 78 C0 A3 D2 0D 82 81 AC 6F DA 5D 72
B2 41 15 E1 97 6E 62 8F 82 73 B4 7C 15 43 85 1E 7B 84 36 DA
79 F2 4C 63 1D 2D 0F D1 90 58 1A 3B E8 B7 1E FA 14 CB 5F EF
17 47 04 83 C9 78 9E 57 26 95 6B DD 47 A2 53 2F D9 FB EB E4
A7 B7 86 BB E7 32 69 82 2F 1F 56 FA 6D 87 12 73 34 DA 02 36
7E DA A1 30 8F 07 58 50 20 21 95 66 28 54 EB 80 D4 8D 6C A0
A1 C3 2B 5F 99 7B 66 90 A8 A1 18 28 BB CD 63 C7 2F 82 8F 87
50 0B 80 E9 76 F3 13 A9 7A 5B 7B B3 E5 F0 16 42 B4 F8 E7 7E
80 15 DD DF 7E 9C 0A 9D F9 85 A1 63 E8 ED 4F E1 15 0E 35 E7
DB 5C E8 F8 2E 88 F5 91 87 91 3E 8B B3 E3 18 C7 4F DF 65 43
BA DF FB 5C 7C B8 DE F2 6B 36 4E 48 ED 1C 04 13 48 2D 6E E6
65 09 63 67 4D 31 7E 47 96 71 A3 28 FF 90 9E B7 4C DF C4 69
29 DA 95 FD 01 5D 3C BE DE A3 A4 35 06 87 1F E4 11 DD 2C 15
E9 3E 72 52 2F 45 B0 25 38 EB 55 E7 F1 56 EB 85 9E 89 5B 19
98 9D 8F B8 8B 6A 4D 28 72 07 3D 69 EC 83 2A CC 4B 8F BF 04
6B A9 D3 E8 E6 3E 35 8E D4 0D 67 CC DB 9C DD 33 99 03 F0 11
EB 89 65 1B C4 28 6C 80 6E 2E 23 0D 7F 45 B8 C5 84 15 A7 9C
5F B4 5D 4C A6 45 6D 99 C7 A1 EF CD 63 D7 F9 21 49 61 8C EF
BB 3D B6 BF FA A7 54 6A FD 69 02 FC FE 4D C2 7A EE 1A 9D A0
69 61 25 85 34 31 11 BD D0 94 63 79 BF 73 9F 57 70 EA 42 CC
E4 D4 A4 2F 07 38 8D 3B D9 CF 1B 87 B7 8F 9C 9B C2 0B 3E BC
FE 9B 3B 7F 2E EE 49 7B 2E C8 23 64 38 90 14 E1 BC 0B 4F 79
44 AD 32 65 EA F1 9C 5C B8 89 C2 DD D1 B2 53 21 BB 8F 9C 81
F8 9B 78 4D 51 04 EF 85 32 0B 6E 56 B6 CD 7F DC E3 86 89 01
1A B0 90 C4 58 57 72 49 BB 12 AE 0B 35 52 9A A2 C3 42 96 93
9C 72 66 AF 84 57 7E 59 0B 73 ED 1A 97 91 D4 EE E0 3B 3E 2A
B9 6E 56 70 21 32 15 0D 15 64 73 84 38 A1 AA E0 D4 8A A1 73
FD 14 ED 3B A9 A5 AF B1 02 BD F9 A7 26 F5 CB 7D 91 0C 55 DD

Metabolix [23.05.2021 21:29:32]

#

Neutrino kirjoitti:

Sulautetun laitteen koodi on sata kilotavua. Koodi on salattava, jotta se voidaan laittaa vapaaseen jakeluun ja päivitettäväksi laitteisiin.

Miksi se on salattava? Mikä on se uhka, jolta salaus suojaa?

Esimerkiksi kilpaileva firma voisi vaikka ostaa kyseisen laitteen ja lukea koodin suoraan sen muistipiiriltä. Netissä olevan tiedoston salaus ei silloin auta.

Neutrino kirjoitti:

Haluan demota äärimmäisen yksinkertaisen xor-salauksen merkityksen,

Ei kai kukaan ole sanonut, etteikö xor operaationa olisi oikea ratkaisu salauksessa. Sitähän käytetään muissakin salauksissa, esimerkiksi juuri kehuttu ChaCha20 tuottaa avainvirran (key stream), jolla data xorrataan.

Alkuperäisen algoritmin suurin ongelmahan oli se, että se salaa 256-bittisiä lohkoja yksitellen (ei virtana) samalla 256-bittisellä xor-avaimella, jolloin sille ei ole montakaan mielekästä käyttökohdetta, kun yksikin paljastuva 256-bittinen lohko riittää salausavaimen murtamiseen. Algoritmi sisältää samat ongelmat kuin se, että käytettäisiin 256-bittistä avainta suoraan xor-operaatioon. Se varsinainen silmukka, jota lähettäjä ilmeisesti luuli hienoksi salausalgoritmiksi, oikeasti vain sekoittelee avainta hieman ennen xorrausta ja on sikäli hyödytön, että salauksen murtamiseen ei tarvita alkuperäistä avainta vaan valmiiksi sekoitettu xor-avain riittää.

Mikä tahansa avainvirran tuottava ratkaisu (vaikka edes LCG) parantaa tilannetta sikäli, että voi salata pidempiä viestejä. Toisaalta jos tästäkin saa useamman LCG:n arvon verran dataa selville, voi ratkaista LCG:n parametrit. Sitä varten on noita parempia salausalgoritmeja, joissa peräkkäisten lohkojen välillä ei ole samanlaista selvää yhteyttä.

Neutrino kirjoitti:

joten kirjoitin muutaman rivin ohjelman, joka salaa netistä kopsaamastani tekstistä 2000 ensimmäistä merkkiä. – – toimitan sadan euron Prisman tms. lahjakortin

100 euron kertapalkkiolla motivaatio salauksen murtamiseen ei ole huiman korkea, varsinkaan, kun viestistä jää hieman epäselväksi, onko tämä nyt siis mainitsemasi 32-bittisellä LCG:llä tehty xor-salaus vai jokin ihan muu vai demonstroitko peräti kertakäyttöisen avaimen hyvyyttä.

Jos olisi tiedossa, että murtaminen säästäisi vaikka vuoden työt kymmeneltä oman firman koodarilta, ehkä asia kiinnostaisi enemmän.

vesikuusi [23.05.2021 21:50:17]

#

Metabolix kirjoitti:

Esimerkiksi kilpaileva firma voisi vaikka ostaa kyseisen laitteen ja lukea koodin suoraan sen muistipiiriltä. Netissä olevan tiedoston salaus ei silloin auta.

Kaikessa on loppupeleissä kyse vain hyökkäyksen kynnyksen nostamisesta. Mainitsemasi hyökkäysmenetelmä on huomattavasti työläämpi ja teknisesti haastavampi kuin tiedoston lataaminen internetistä. Softa voidaan esimerkiksi suorittaa kokonaan prosessorin sisäisessä muistissa, "on-chip RAM:ssa". Jos JTAG-rajapinta tai vastaava on estetty kokonaan (kuten normaaliin tietoturvaan kuuluu) niin tuohon muistiin voi olla aika hankalaa päästä käsiksi fyysisesti peukaloimalla. Ei mahdotonta mutta vaatii huomattavasti enemmän osaamista ja työtä kuin tiedoston lataaminen netistä.

Jos motivatiota löytyy niin joku tulee kyllä murtamaan salauksen joskus ja siksi sen tapahtuman todennäköisyyttä halutaan pienentää.

Edit: tajusin vasta myöhemmin että annetussa esimerkissä salaus puretaan jo ennen koodin kirjoittamista pysyvään muistiin. Tämä tekee tietysti sen että koodin voi lukea pysyvästä muistista. Tässä tapauksessa tiimin olisi kyllä hyvä nostaa pää pensaasta ja kysyä itseltään että voitaisiinko ostaa vain vähän isompi fläshi että ei tarvitse nolata itseään.

noutti kirjoitti:

Tämä on lempiketjuni tällä foorumilla

Tilanne on eskaloitunut siihen pisteesen että täällä lupaillaan Prisman lahjakortteja salauksen murtamisesta. Tämä voi hyvinkin olla lempiketjuni tällä foorumilla

Brebl [23.05.2021 23:55:52]

#

Japaniasta tulevissa leluroboteissa olen nähny, että mikrokontrollerit ja pinnit on piilotettu jonkin valetun mustan mössön sisälle. Liekö suojausta vakoojia vai kosteutta vastaan.

Grez [24.05.2021 08:29:40]

#

vesikuusi kirjoitti:

Jos motivatiota löytyy niin joku tulee kyllä murtamaan salauksen joskus ja siksi sen tapahtuman todennäköisyyttä halutaan pienentää.

Siksi koodia ei kannatakaan turhaan piirillä salata vaan estää vaan sen lukeminen.

Esim. sellaisia fpga-piirejä käsittäkseni on saatavilla, joissa "koodi" (eli vhdl/verilog koodista käännetty logiikka) lukeminen on pyritty tekemään mahdottomaksi jopa käyttäen piirin dekapselointia ja esim. elektorniikkamikroskooppia.

Toki jos piiri säilytetään ulkoisella muistilla, niin sit sen voi salata vaikka AESilla ja säilyttää avain piirillä. Tällöin taas avaimeen pätee sama mikä yllä, että pitäisi estää sen lukeminen.

Brebl kirjoitti:

Japaniasta tulevissa leluroboteissa olen nähny, että mikrokontrollerit ja pinnit on piilotettu jonkin valetun mustan mössön sisälle. Liekö suojausta vakoojia vai kosteutta vastaan.

Vai onko niissä vaan pyritty säästämään kustannuksia ja hankittu piirit ilman kotelointia?

Siis tälleen (säästö): http://www.sbszoo.com/ve6sbs/projects/compass/top.jpg
Vai tälleen (suojaus): https://i.redd.it/zm6mfs1f4ui51.jpg

Brebl [24.05.2021 10:56:04]

#

Grez kirjoitti:

Siis tälleen (säästö): http://www.sbszoo.com/ve6sbs/projects/compass/top.jpg
Vai tälleen (suojaus): https://i.redd.it/zm6mfs1f4ui51.jpg

Ensimmäistä tarkoitin.
OT: Jälkimmäinen näyttää siltä pleikkarin levynpyöritys/ kelkkamekanismilta. 🤔

Grez [24.05.2021 12:34:58]

#

Brebl kirjoitti:

Ensimmäistä tarkoitin.

Joo se on "Chip on Board" ja sitä käytetään laajasti suuren volyymin tuotannossa kustannussäästön takia.

Brebl kirjoitti:

OT: Jälkimmäinen näyttää siltä pleikkarin levynpyöritys/ kelkkamekanismilta. 🤔

Se on itse asiassa Wii:n DVD-asema. Tuossa tuo epoksi on laitettu kahden piirin välisen kommunikaatioväylän päälle (molempien piirien pinnit ja niiden välissä menevä piirilevy) jotta niihin ei olisi niin helppo juottaa modpiiriä.

Grez [24.05.2021 13:07:41]

#

Neutrino kirjoitti:

The Alchemist ja Grez, asia on kuten kirjoitin, salausalgoritmi tulee valita tilanteen ja tarpeen mukaan.

En ole (eikä The Alchemistkaan nähdäkseni) väittänyt muutakaan.

Neutrino kirjoitti:

Lahjan vastaanottaja vastaa mahdollisista veroseuraamuksista.

Jos annat jotain vastikkeellisesti (kuten tässä), niin kyseessä ei verotuksellisesti ole lahja. Jos kyseessä katsotaan olevan palkka, niin et voi määrittää että palkansaaja olisi vastuussa veroseuraamuksista.

En usko että kukaan kiinnostuu näillä reunaehdoilla noin pienen palkkion toivossa koittamaan tuon purkamista. Jos esimerkiksi käyttämäsi avain olisi 2000 tavun pituinen, niin silloinhan tuo on mahdoton purkaa.

Muutenkin minun on vaikea ymmärtää mikä tuon "haasteen" pointti on. Se että kukaan ei tule sitä purkamaan ei todista mitään ja se että joku sen purkaisi taas on aika epätodennäköistä.

jalski [24.05.2021 14:47:22]

#

Grez kirjoitti:

Jos esimerkiksi käyttämäsi avain olisi 2000 tavun pituinen, niin silloinhan tuo on mahdoton purkaa.

Muutenkin minun on vaikea ymmärtää mikä tuon "haasteen" pointti on. Se että kukaan ei tule sitä purkamaan ei todista mitään ja se että joku sen purkaisi taas on aika epätodennäköistä.

Nykyisin yleisimmin käytetty 32 tavun pituinen avain luotuna vaikka salasanasta ja suolasta PBKDF2 algoritmilla 10000 iteraatiolla on jo kohtuullisen varma, joten 2000 tavun mittainen avain on jo mielestäni liioittelua.

Neutrino [24.05.2021 20:17:18]

#

Täällähän on vilkasta kuin olisi muoviämpäreitä jaossa.

Metabolix kirjoitti:

Miksi se on salattava? Mikä on se uhka, jolta salaus suojaa? Esimerkiksi kilpaileva firma voisi vaikka ostaa kyseisen laitteen ja lukea koodin suoraan sen muistipiiriltä. Netissä olevan tiedoston salaus ei silloin auta.

Uhkia ovat Reverse Engineering ja suora kopiointi. Tuotekehitysinvestointi saattaa olla seitsennumeroinen summa euroja ja koska elektroniikan tai mekaniikan kopiointi eivät ole suuri ponnistus, käytännössä kaikki IP on kiinni softassa. Kilpaileva firma voi ostaa kyseisen laitteen, se on totta ja voin kertoa, että näin aivan yleisesti tehdäänkin. Mutta kunhan softa on luotettavasti salattu, arvokas IP on turvassa.

Metabolix kirjoitti:

viestistä jää hieman epäselväksi, onko tämä nyt siis mainitsemasi 32-bittisellä LCG:llä tehty xor-salaus vai jokin ihan muu vai demonstroitko peräti kertakäyttöisen avaimen hyvyyttä.

Kirjoitin epätarkasti, pahoittelut. Algoritmi on 32-bitin LCG ja byte-wide xor. Esittämässäni demossa ei ole tippaakaan kompaa mukana.

Olenkohan avittanut jo liikaa?

vesikuusi kirjoitti:

muistiin voi olla aika hankalaa päästä käsiksi fyysisesti peukaloimalla. Ei mahdotonta mutta vaatii huomattavasti enemmän osaamista ja työtä kuin tiedoston lataaminen netistä. Jos motivatiota löytyy niin joku tulee kyllä murtamaan salauksen joskus ja siksi sen tapahtuman todennäköisyyttä halutaan pienentää. Edit: tajusin vasta myöhemmin että annetussa esimerkissä salaus puretaan jo ennen koodin kirjoittamista pysyvään muistiin. Tämä tekee tietysti sen että koodin voi lukea pysyvästä muistista.

Olet oikeilla jäljillä Edit-lisäystä lukuunottamatta. Purettu koodi on muistissa vain mikrokontrollerin sisällä, kuten aikaisemmin mainitsin ja koko salaamisen idea perustuu siihen. Kontrollerin sisältä koodia on jokseenkin mahdotonta kaivaa ulos. Jokin puolijohdelabra tms. sen voinee tehdä, mutta kynnys on `käsittääkseni hyvin korkealla.

Brebl kirjoitti:

mikrokontrollerit ja pinnit on piilotettu jonkin valetun mustan mössön sisälle. Liekö suojausta vakoojia vai kosteutta vastaan.

Yleensä näitä tehdään kustannussyistä, kuten jäljempänä viestiketjussa onkin kerrottu. COB on yleinen mm. näyttökomponenteissa, laskimissa, leluissa ym. halvassa volyymitavarassa. Muitakin syitä mössön käyttöön on, esimerkiksi autoelektroniikka lakataan hapettumisen estämiseksi ja jossakin muussa yhteydessä syy voi olla lämpötila, tärinä, kotelointiratkaisu ja toki IP:n suojauskin. Mössö on tietenkin huono juttu elektroniikan huollon kannalta.

Grez kirjoitti:

Siksi koodia ei kannatakaan turhaan piirillä salata vaan estää vaan sen lukeminen.

Jos mikrokontrollerilla ohjattu laite on vaikkapa pensasleikkuri joka ostetaan marketista, käytetään ehkä kymmenen vuotta ja paiskataan elektroniikkaromuun, koodista on tuskin edes mainintaa käyttöohjeessa. Koodi ohjelmoidaan mikrokontrolleriin tehtaalla, eikä kukaan kysele sen perään, eivät edes kopioijat. Mutta jos laite on sellainen, joka pitää päivittää jossain vaiheessa tuotteen elinkaarta, tilanne muuttuu aivan toiseksi. Sinun kellosi saattaa olla päivitettävissä netin yli. Arveletko, että koodi tulee sieltä salaamattomana?

Grez kirjoitti:

jos piiri säilytetään ulkoisella muistilla, niin sit sen voi salata vaikka AESilla ja säilyttää avain piirillä. Tällöin taas avaimeen pätee sama mikä yllä, että pitäisi estää sen lukeminen.

Ulkoista muistia käytetään enää harvoin nykyään sulautetuissa järjestelmissä, flash-muistia sisältävät mikrokontrollerit ovat valtavirtaa. Lähinnä vain silloin kun prosessori on liian nopea flash-muistille, mikrokontrollerin sisällä on pelkkää RAM:ia, josta ohjelma suoritetaan ja jonne se luetaan esimerkiksi ulkoiselta, sarjamuotoiselta flash-muistipiiriltä. Vielä 90-luvulla ulkoinen koodimuisti oli aivan tavanomainen järjestely, mutta integraatioasteen ja nopeuksien kasvu sekä leveät data- ja osoiteväylät ovat tehneet tällaisista ratkaisuista kalliita erikoistapauksia. Kertokaa mielellään, kuka tietää tällaisista.

Grez kirjoitti:

Jos annat jotain vastikkeellisesti (kuten tässä), niin kyseessä ei verotuksellisesti ole lahja. Jos kyseessä katsotaan olevan palkka, niin et voi määrittää että palkansaaja olisi vastuussa veroseuraamuksista.

Työsopimuslaki 1 luku 1 § "Tätä lakia sovelletaan sopimukseen (työsopimus), jolla työntekijä tai työntekijät yhdessä työkuntana sitoutuvat henkilökohtaisesti tekemään työtä työnantajan lukuun tämän johdon ja valvonnan alaisena palkkaa tai muuta vastiketta vastaan."

Tietääkseni en ole tässä tehnyt tai tarjonnut työsopimusta kenellekään, eikä sinusta tai kenestäkään muustakaan tule työntekijääni vain esittämääni demoon vapaaehtoisesti osallistumalla. Totta, lupasin kisan voittajalle palkinnon, lahjakortin, jonka arvo on sata euroa. Verotuksellisista syistä ei enempää, valitettavasti, koska en katso voivani tilittää ennakonpidätystä tällaisesta.

Palkintojen verotus "kilpailupalkinnosta ei tarvitse toimittaa ennakonpidätystä, jollei palkinnon antaminen liity työ- tai palvelussuhteeseen taikka jollei palkinto ole sellainen muu ennakkoperintälaissa tarkoitettu palkka, työ- tai käyttökorvaus tai urheilijanpalkkio, jonka arvo ylittää 100 euroa"

Grez kirjoitti:

En usko että kukaan kiinnostuu näillä reunaehdoilla noin pienen palkkion toivossa koittamaan tuon purkamista. Jos esimerkiksi käyttämäsi avain olisi 2000 tavun pituinen, niin silloinhan tuo on mahdoton purkaa. Muutenkin minun on vaikea ymmärtää mikä tuon "haasteen" pointti on. Se että kukaan ei tule sitä purkamaan ei todista mitään ja se että joku sen purkaisi taas on aika epätodennäköistä.

Palkkio on pieni edellämainitusta syystä. Valitukset voi osoittaa ties vaikka eduskuntaan. Mutta jos palkkio onkin pieni, maine ja kunnia tehtävän ratkaisemisesta ovat monin verroin suurempia.

Haasteen pointti on se, että haluan nähdä miten helposti ja nopeasti kotimainen valioaines murtaa tällaisen salauksen. Murtamiseen kun on erilaisia työkalujakin, joista minulla ei välttämättä ole edes hajua.

Se, että kukaan ei onnistu purkamisessa olisi minulle pettymys. Se, että joku ilmoittautuu jo huomenna onnistuneensa saa minut miettimään, pitääkö tietoturvaa kiristää paljonkin.

Jos lähettäisin tehtävän intialiseen ohjelmointiputkaan vastaavan palkkiotarjouksen kera, luultavasti saisin jakaa palkkioita kuin muoviämpäreitä heti huomenaamusta alkaen.

vesikuusi [24.05.2021 20:19:27]

#

Grez kirjoitti:

Toki jos piiri säilytetään ulkoisella muistilla, niin sit sen voi salata vaikka AESilla ja säilyttää avain piirillä. Tällöin taas avaimeen pätee sama mikä yllä, että pitäisi estää sen lukeminen.

Niin no toki satakiloinen koodi menee vielä prosessorin sisäiseen flashiin jos sellainen löytyy, mikä antaa saman edun kuin OCRAM.

Jos unohdetaan FPGA ja puhutaan monimegatavuisesta ARM tms. koodista, niin sanoisin että ulkoinen pysyvä muisti on aika tyypillinen ja silloin voi olla hyvä salata koodi. Avaimen tai sen osan voi tallentaa prosessoriin kertaohjelmoitaviin lukukelvottomiin (joita vain prossu itse siis osaa lukea) rekistereihin, jos se sellaista tukee. Tässä on toki tullut aika monta alustariippuvaista seikkaa jo.

vesikuusi [24.05.2021 22:09:58]

#

Tässä vielä jonkinlainen esitelmä aiheesta tietyllä prosessoriperheellä, jos jotakuta kiinnostaa. Ideana on siis että prossuun on sisäänrakennettu tuki muun muassa salauksen purkamiselle.

https://www.nxp.com/docs/en/white-paper/IMXRTCROSSWP.pdf

vesikuusi [24.05.2021 23:04:51]

#

Neutrino kirjoitti:

Purettu koodi on muistissa vain mikrokontrollerin sisällä

Niin tietysti, tein oletuksen/väärinymmärryksen että tuo olisi ulkoisessa flashissa. Siinä tapauksessa asia on kuten sanot ja kuten kirjoitinkin aiemmassa viestissäni, eli lukeminen peukaloimalla on erittäin vaikeaa.

Metabolix [25.05.2021 01:00:49]

#

Neutrino kirjoitti:

Algoritmi on 32-bitin LCG ja byte-wide xor.

Silti lähtötiedot ovat niin suppeat, ettei tuohon kannata tuhlata aikaa ja kotikoneen resursseja. 32-bittinen LCG jättää vielä aika paljon arvailun varaan: kertoja, lisättävä, modulo, siemenluku, mahdollinen bittisiirto ennen tuloksen käyttöä. Näistä kertyy salausavainta jo suunnilleen 100 bitin edestä, eli pelkkä LCG-vaihtoehtojen brute force ei tule kyseeseen. Datasta on tiedossa käytännössä vain, että luultavasti suurin osa merkeistä on ASCII-aakkosia, mutta ei ole tietoa kielestä (sanastohyökkäystä varten) tai erikoismerkeistä (alkaako teksti edes aakkosella, onko UTF-8 vai CP1252). Jokin lisähaavoittuvuus pitäisi olla, jotta tehtävästä tulisi mielekäs.

Uskon, että tosielämän tilanteissa tuon murtaminen lähtisi liikkeelle siitä, että kaivettaisiin lisää tietoa algoritmista tai datasta: saako algoritmia testattua omilla syötteillä, onko datassa jokin tunnettu osuus.

Eli toki tämä esimerkkisi ”todistaa” sen, että LCG:llä tehty xor-salaus on kohtuullinen salaus siinä erittäin rajallisessa tapauksessa, että ainoa saatavilla oleva tieto on yksi 2000 tavun salattu viesti.

Kun nyt kerran alettiin huvitella sillä, onko heikko salaus sittenkin tarpeeksi hyvä, niin poimin 255 tavua UTF-8-tekstiä tästä keskustelusta yhden rivin alusta ja ”salasin” sen yhden rivin PHP-koodilla. Menetelmässä ei ole varsinaista salausavainta, ja koodissa ei ole mitään tuntematonta dataa (lukuja tai merkkijonoja), vaan pitää tietää vain oikeat funktiot. Tässä onkin jo aika paljon vihjeitä, joten kuka saa selville salausmenetelmän ja viestin? Eli tällä demonstroin sitä, että kun algoritmia ei kerrota, melkein mikä tahansa voi näyttää salaukselta. Ehkä se jossain tilanteessa kelpaa. Kryptografiassa ollaan kiinnostuneita muistakin turvallisuuden osatekijöistä.

21 3b b2 55 14 9f 2f 6b  b2 a0 9c a6 a8 f3 9d 2c
53 94 a7 32 3a 60 f3 ae  a7 6c ae 55 3f 61 55 38
35 a9 32 21 55 38 1c a7  37 22 9c a1 1c a2 f8 ed
a7 64 9f 2c a2 26 2c 99  1a a3 75 9c a9 3d 5c 55
41 35 a1 32 32 55 43 2e  a1 3c b4 2c 53 b4 9c 99
2e a1 a1 32 30 9e 2d 9f  34 6d a9 34 a5 a5 32 32
a2 f3 a0 a8 98 2e 2c 9e  21 55 1e 72 a9 3c a6 a7
c0 71 55 37 2e 55 23 90  60 ac a0 a5 90 71 a7 3c
a6 a9 90 76 a7 70 90 70  f3 b6 2c 94 b4 9c 9d 75
9f 70 32 a8 f3 a2 ab 34  b4 55 41 22 31 32 21 a1
f0 71 9f c0 76 9c a0 32  a7 71 1c 55 34 9c ab 34
a1 55 41 22 9c a0 32 a8  f3 9e a8 9c a1 55 43 2e
9c 98 1e 2c a3 ae 55 43  9c 30 9e 72 a7 70 90 70
f3 a6 a8 99 2e a8 a1 32  a9 42 26 a7 64 6d a1 34
9c a9 41 32 30 a0 26 2c  53 b4 2c 9c 6d 9f 3f 66
a7 64 9e 9c 9e 2d a9 f0  71 9d 90 71 9c a0 32

The Alchemist [25.05.2021 08:00:33]

#

Johan me olemme yleisesti hyväksyneet sen tosiasian, että jos salausalgoritmia ei tunneta, niin yksittäisen viestin purkaminen on "hyvin vaikeaa". En nyt itse keksi, mitä te meinaatte todistaa näillä kryptausknopeillanne.

Ne menevät myös ketjun aiheen ohitse, sillä AP itsevarmasti julisti, että hänen salausalgoritminsa on niin hyvä, että koodin voi julkaista netissä, koska "koodin tiedossa olosta ei ole mitään hyötyä mahdollisessa koodin [salauksen] murtamisessa".

vesikuusi [25.05.2021 09:43:51]

#

The Alchemist kirjoitti:

En nyt itse keksi, mitä te meinaatte todistaa näillä kryptausknopeillanne.

Ne menevät myös ketjun aiheen ohitse --

Keskustelua voi käydä ilman että meinaa todistaa jotain. Vaikkakin hieman ohi aiheen niin tässä ketjussa syntynyt keskustelu on ihan mielenkiintoista.

Grez [25.05.2021 10:01:15]

#

Turhaa pilkunviilausta tarttua tuohon todistaa sanaan.

Itsekään en keksi noiden kryptausknoppien tarkoitusta.

Neutrino [25.05.2021 21:53:30]

#

Koodaaminen on usein hyödyllistä huvitteluakin.

Metabolix kirjoitti:

poimin 255 tavua UTF-8-tekstiä tästä keskustelusta yhden rivin alusta ja ”salasin” sen yhden rivin PHP-koodilla. Menetelmässä ei ole varsinaista salausavainta, ja koodissa ei ole mitään tuntematonta dataa (lukuja tai merkkijonoja)

Olen amatööri mitä kryptografiaan tulee, mutta huvin vuoksi vilkaisin "salattua" koodiasi. Kerron havaintoni, jos niistä olisi apua jollekulle toiselle asiasta innostuneelle.

Salatun koodin entropia on suurempi kuin keskustelusta poimitulta tekstiltä voisi odottaa. Normaalisti suomenkielisessä 255 merkin sattumanvaraisessa tekstissä on noin 30 erilaista merkkiä. Jos teksti sisältää lisäksi numeroita ja erikoismerkkejä, lukema saattaa olla 40, ehkä jopa 50. Salatussa koodissasi on 70 erilaista merkkiä. Siitä päättelen, ettei salauksesi ole mikään yksi-yhteen-korvausalgoritmi.

Excel on näppärä työkalu tällaiseen analysointiin. Tehokkaampia työkaluja epäilemättä löytyisi netistä, mutta halusin säilyttää huvin tässä hommassa. Excelin grafiikka näyttää yhdellä silmäyksellä miten 255 lukuarvoa sijoittuvat. Havaittavissa on selkeä painotus, mitä hyvillä satunnaisluvuilla salattaessa ei tule esiin.

Lukuarvoista voi nähdä myös toistuvan syklin kolmen lukeman välein. Jaoin luvut kolmeen sarakkeeseen, joissa on nyt 20, 37 ja 35 erilaista merkkiä. Koska salattu teksti on keskustelusta poimittua, sykli tuskin tulee sieltä. Salausalgoritmissa lienee merkin indeksi modulo 3. Algoritmi kääntelee bittejä muutenkin, mahdollisesti jopa merkkien kesken, mutta tämän pidemmälle en nyt ehtinyt.

jalski [28.05.2021 08:57:33]

#

Neutrino kirjoitti:

Salatun koodin entropia on suurempi kuin keskustelusta poimitulta tekstiltä voisi odottaa. Normaalisti suomenkielisessä 255 merkin sattumanvaraisessa tekstissä on noin 30 erilaista merkkiä. Jos teksti sisältää lisäksi numeroita ja erikoismerkkejä, lukema saattaa olla 40, ehkä jopa 50. Salatussa koodissasi on 70 erilaista merkkiä. Siitä päättelen, ettei salauksesi ole mikään yksi-yhteen-korvausalgoritmi.

Excel on näppärä työkalu tällaiseen analysointiin. Tehokkaampia työkaluja epäilemättä löytyisi netistä, mutta halusin säilyttää huvin tässä hommassa. Excelin grafiikka näyttää yhdellä silmäyksellä miten 255 lukuarvoa sijoittuvat. Havaittavissa on selkeä painotus, mitä hyvillä satunnaisluvuilla salattaessa ei tule esiin.

Miksi 70 erilaista merkkiä? Tavuja heksadumpista voi laskea 70 erilaista, mutta esimerkiksi "ääkköset" vaativat muistaakseni kaksi tavua.

Miksi Excel? Itse lukisin 8th:llä tuon heksadumpin tekstinä suoraan tiedostosta, poistaisin välilyönnit ja rivinvaihdot säännöllisellä lausekkeella sekä konvertoisin tavupuskuriksi. Nyt tuosta saa suoraan tulostettua kunnollisen heksadumpin ja unpack:illä tavupuskurin tavut taulukkoon tutkimista varten. Nyt tieto on hyvin esillä tutkittavaksi ja ideoita voidaan suoraan kokeilla REPL:n avulla.

Grez [28.05.2021 11:41:51]

#

jalski kirjoitti:

Miksi Excel? Itse lukisin 8th:llä tuon heksadumpin tekstinä suoraan tiedostosta

Kenties joku on yhtä näppärä Excelin kanssa kuin sinä 8th:n kanssa. Jos sinulla kerran on idea mitä kannattaa tehdä niin suosittelen tekemään enkä kyseenalaistamaan muiden käyttämiä työkaluja.

jalski [28.05.2021 14:58:57]

#

Grez kirjoitti:

(28.05.2021 11:41:51): ”– –” Kenties joku on yhtä näppärä Excelin kanssa...

Kukin saa käyttää mitä työkaluja tykkää! En mielestäni kirjoittanut negatiiviseen sävyyn kuten itselläsi on tapana tehdä. Taidat olla tyypillinen mamman poika joka tykkää netissä huudella kun oikeassa elämässä on raukka tissiposki? Excel nyt vaan on lähtökohtaisesti taulukkolaskentaohjelma, jolla tämän kaltaisen tavupuskurin käsittely on paljon vaikeampaa kuin varsinaisilla ohjelmointi työkaluilla.

Metabolix [28.05.2021 15:27:22]

#

jalski, toivottavasti itse olet niin kova jätkä, että ymmärrät, että tuollainen haukkuminen ei ole asiallista ja on lähinnä noloa itsellesi. Lisäksi nyt Excelillä on tuotettu kaksi kiinnostavaa havaintoa ja 8th:lla nolla, joten olen Grezin kanssa ihan samaa mieltä viestisi tulkinnasta ja hyödystä keskustelussa.

Grez [28.05.2021 15:28:47]

#

ad hominemia vaan kehiin kun argumentit loppuu. ("Paan täysille luureihin, sen laulun...")

No mielestäni Neutrino perusteli Excelin käyttöä ja kertoi tiedostavansa että tehokkaampiakin työkaluja on saatavilla, joten kyllä tuollainen "Miksi Excel?" ja oman suosikkityökalun ylistys perään vahvasti negatiivissävyiseltä.

Mutta hyvä kun korjasit väärinkäsitykseni. Minunkaan viestejäni ei ole tarkoitettu negatiivissävyiseksi. Ehkä se sävyn tunnistaminen sitten on vaikeaa, kun kumpikin luulee toisen viestejä negatiivisiksi.

jalski [28.05.2021 16:41:01]

#

Metabolix kirjoitti:

(28.05.2021 15:27:22): jalski, toivot­ta­vasti itse olet niin kova...

Itseäni lähinnä kiinnosti mikä on tuo Neutrinon mainitsema Excel:in grafiikka tässä tehtävässä? Tarkoituksenani ei alunperin ollut tehdä tästä mitään ihmisten ja työkalujen välistä pyhää sotaa. Vastasin viestiin ruokatauolla kiireessä ja tarkoituksena oli kyseenalaistaa miten voidaan päätellä tekstissä olevan 70 erilaista merkkiä, jos merkki voi koostua 1 - 4 tavusta. Olen pahoillani, että ärsyynnyin. Pitkä työviikko takana, melkein kahden viikon työtunneilla. Ruvennut viime aikoina ärsyttämään hyökkäävä keskustelun sävy mitä tällä foorumilla nykyään etupäässä harrastetaan ja tähän tullut lisänä myös täysin älyvapaat viestit.

Metabolix [28.05.2021 19:18:17]

#

jalski kirjoitti:

Itseäni lähinnä kiinnosti mikä on tuo Neutrinon mainitsema Excel:in grafiikka tässä tehtävässä?

Kokonaislukujen jakaumasta puhuttaessa veikkaisin ihan jotain tavallista pylväskaaviota (histogrammia).

jalski kirjoitti:

miten voidaan päätellä tekstissä olevan 70 erilaista merkkiä, jos merkki voi koostua 1 - 4 tavusta.

Siinä olet toki oikeassa, että UTF-8-tekstissä ääkkösiin käytetään kaksi tavua, joista ensimmäinen on c3, jolloin jos tekstissä on Neutrinon oletuksen mukaan 40 merkkiä sisältäen ääkkösiä, siinä on 41 eri tavua. Merkitys tehtävän kannalta on marginaalinen. Harvinaisempina merkkeinä löysin tästä keskustelusta ainakin nämä: –”🤔

Mainitsemassasi kohdassa Neutrino analysoi salattua dataa ja tarkoitti merkillä ilmeisesti tavua, koska salattua dataa ei toki voi lukea tekstinä eikä varsinkaan UTF-8-tekstinä. (Myös hämmentävästi hän käyttää sanaa ”koodi” vaikka tarkoittaa dataa.) Salauksissa yleisemmin puhutaan usein symboleista, ja siis käytännössä symboli on tavallisesti yksi tavu.

Neutrino kirjoitti:

Algoritmi on 32-bitin LCG ja byte-wide xor.

Ilmeisesti kuitenkaan käytössä eivät ole yksinkertaisesti 8 alinta bittiä LCG:stä modulo 2**32, vai kuinka? Tai jos on, tein varmaan jonkin huolimattomuusvirheen.

Pyöritin hetken brute forcella eri LCG-parametreja läpi. Kuten aiemmin mainitsin, vaihtoehtoja on liikaa käytännöllisesti testattavaksi (kotikoneella) ja antamasi tiedot ovat varsin rajalliset. Monilla eri parametreilla tulee hyvin samantapainen tulos dekryptauksessa ja datassa muuttuu vain pari merkkiä (esimerkki alla), joten hakuavaruutta olisi varmaan mahdollista pienentää paljon, jos ymmärtäisi LCG-matematiikkaa vähän paremmin kuin minä. Eli jos parametreista saadaan tehtyä samantapaiseen tulokseen johtavia joukkoja, voisi ensin kokeilla kaikista joukoista yhden vaihtoehdon ja löytää lupaavat joukot tarkempaan testaukseen.

lcg(): siemen = 194; kerroin = 63567; lisäys = 61469; palautus = luku >> 8;
IkhoQ@�#��;w�dTrx,y:Q�NDlg/�azp

lcg(): siemen = 161; kerroin = 63567; lisäys = 61995; palautus = luku >> 8;
IkhoQ@�#��;v�dTry,y:Q�NDlg/�azp

lcg(): siemen = 228; kerroin = 14415; lisäys = 61889; palautus = luku >> 8;
JktoQD�'��;s�hTvx(x>Q�N@lc/�bvp

jalski [28.05.2021 19:38:42]

#

En ole varsinaisesti ehtinyt tehtävää pähkäillä, mutta otin heksadumpin ja tiedot kuinka paljon kutakin tavua esiintyy. Meinasin katsella bittitasolla eroavaisuuksia puskurissa eniten esiintyvien tavujen ja eniten yleensä suomen kielessä esiintyvien kirjainten väillä ( jos vaikka oletkin vain vähän rotatoinut tavun bittejä... ).

"data.txt" f:slurp >s  /\s+/ "" s:replace! b:>hex constant data

: app:main
  data dup
  "Heksadumppi puskurista:\n" .
  dump cr
  "*B" unpack "%s tavua:\n\n" s:strfmt .
  ' noop a:group m:keys a:len nip "%d erilaista tavua.\n\n" s:strfmt .
  ( a:len nip swap dup >n "hex: %2x dec: %3s kpl: %2d\n" s:strfmt . ) m:each drop
  bye ;
Heksadumppi puskurista:

000000000302fd30 21 3b b2 55 14 9f 2f 6b b2 a0 9c a6 a8 f3 9d 2c !;.U../k.......,
000000000302fd40 53 94 a7 32 3a 60 f3 ae a7 6c ae 55 3f 61 55 38 S..2:`...l.U?aU8
000000000302fd50 35 a9 32 21 55 38 1c a7 37 22 9c a1 1c a2 f8 ed 5.2!U8..7"......
000000000302fd60 a7 64 9f 2c a2 26 2c 99 1a a3 75 9c a9 3d 5c 55 .d.,.&,...u..=\U
000000000302fd70 41 35 a1 32 32 55 43 2e a1 3c b4 2c 53 b4 9c 99 A5.22UC..<.,S...
000000000302fd80 2e a1 a1 32 30 9e 2d 9f 34 6d a9 34 a5 a5 32 32 ...20.-.4m.4..22
000000000302fd90 a2 f3 a0 a8 98 2e 2c 9e 21 55 1e 72 a9 3c a6 a7 ......,.!U.r.<..
000000000302fda0 c0 71 55 37 2e 55 23 90 60 ac a0 a5 90 71 a7 3c .qU7.U#.`....q.<
000000000302fdb0 a6 a9 90 76 a7 70 90 70 f3 b6 2c 94 b4 9c 9d 75 ...v.p.p..,....u
000000000302fdc0 9f 70 32 a8 f3 a2 ab 34 b4 55 41 22 31 32 21 a1 .p2....4.UA"12!.
000000000302fdd0 f0 71 9f c0 76 9c a0 32 a7 71 1c 55 34 9c ab 34 .q..v..2.q.U4..4
000000000302fde0 a1 55 41 22 9c a0 32 a8 f3 9e a8 9c a1 55 43 2e .UA"..2......UC.
000000000302fdf0 9c 98 1e 2c a3 ae 55 43 9c 30 9e 72 a7 70 90 70 ...,..UC.0.r.p.p
000000000302fe00 f3 a6 a8 99 2e a8 a1 32 a9 42 26 a7 64 6d a1 34 .......2.B&.dm.4
000000000302fe10 9c a9 41 32 30 a0 26 2c 53 b4 2c 9c 6d 9f 3f 66 ..A20.&,S.,.m.?f
000000000302fe20 a7 64 9e 9c 9e 2d a9 f0 71 9d 90 71 9c a0 32    .d...-..q..q..2

255 tavua:

70 erilaista tavua.

hex: 37 dec:  55 kpl:  2
hex: 9c dec: 156 kpl: 15
hex: b4 dec: 180 kpl:  5
hex: 64 dec: 100 kpl:  3
hex: 32 dec:  50 kpl: 14
hex: 99 dec: 153 kpl:  3
hex: 3d dec:  61 kpl:  1
hex: a5 dec: 165 kpl:  3
hex: 9e dec: 158 kpl:  6
hex: a8 dec: 168 kpl:  7
hex: f3 dec: 243 kpl:  7
hex: 6c dec: 108 kpl:  1
hex: 3a dec:  58 kpl:  1
hex: 76 dec: 118 kpl:  2
hex: 30 dec:  48 kpl:  3
hex: 23 dec:  35 kpl:  1
hex: 35 dec:  53 kpl:  2
hex: ae dec: 174 kpl:  3
hex: 2d dec:  45 kpl:  2
hex: a0 dec: 160 kpl:  7
hex: 1e dec:  30 kpl:  2
hex: c0 dec: 192 kpl:  2
hex: 14 dec:  20 kpl:  1
hex: 70 dec: 112 kpl:  5
hex: ab dec: 171 kpl:  2
hex: a7 dec: 167 kpl: 11
hex: 53 dec:  83 kpl:  3
hex: 75 dec: 117 kpl:  2
hex: 60 dec:  96 kpl:  2
hex: f0 dec: 240 kpl:  2
hex: 26 dec:  38 kpl:  3
hex: 38 dec:  56 kpl:  2
hex: 1c dec:  28 kpl:  3
hex: 43 dec:  67 kpl:  3
hex: 90 dec: 144 kpl:  6
hex: ac dec: 172 kpl:  1
hex: 3c dec:  60 kpl:  3
hex: 2f dec:  47 kpl:  1
hex: 98 dec: 152 kpl:  2
hex: a2 dec: 162 kpl:  4
hex: f8 dec: 248 kpl:  1
hex: 1a dec:  26 kpl:  1
hex: 72 dec: 114 kpl:  2
hex: a9 dec: 169 kpl:  8
hex: 55 dec:  85 kpl: 14
hex: 6d dec: 109 kpl:  3
hex: 3b dec:  59 kpl:  1
hex: 9d dec: 157 kpl:  3
hex: 2c dec:  44 kpl:  9
hex: 41 dec:  65 kpl:  4
hex: a1 dec: 161 kpl: 10
hex: 6b dec: 107 kpl:  1
hex: 9f dec: 159 kpl:  6
hex: 61 dec:  97 kpl:  1
hex: ed dec: 237 kpl:  1
hex: 94 dec: 148 kpl:  2
hex: b2 dec: 178 kpl:  2
hex: 42 dec:  66 kpl:  1
hex: 31 dec:  49 kpl:  1
hex: b6 dec: 182 kpl:  1
hex: 22 dec:  34 kpl:  3
hex: 66 dec: 102 kpl:  1
hex: 34 dec:  52 kpl:  6
hex: 3f dec:  63 kpl:  2
hex: 2e dec:  46 kpl:  6
hex: a3 dec: 163 kpl:  2
hex: 21 dec:  33 kpl:  4
hex: 71 dec: 113 kpl:  6
hex: 5c dec:  92 kpl:  1
hex: a6 dec: 166 kpl:  4

Neutrino [29.05.2021 16:29:10]

#

Peace, ohjelmoijat hyvät!

Excel on yksi hyvä työkalu moneen tarkoitukseen ja monen muun joukossa. Kaikkia ei kukaan voi hallita. Minulle Excel on tuttuakin tutumpi ja se sopii erinomaisesti pienen datamassan analysointiin yhdessä mahdollisesti tarvittavien koodinpätkien kanssa.

Metabolixin tehtävä oli kaikkea muuta kuin helppo. Arvelen ratkaisseeni salausmenetelmän alun pienen hapuilun jälkeen ja palaan palstalle niin pian kuin saan kaivettua viestin esiin.

jalski [29.05.2021 19:14:40]

#

Metabolix kirjoitti:

Neutrino kirjoitti:

Algoritmi on 32-bitin LCG ja byte-wide xor.

Ilmeisesti kuitenkaan käytössä eivät ole yksinkertaisesti 8 alinta bittiä LCG:stä modulo 2**32, vai kuinka? Tai jos on, tein varmaan jonkin huolimattomuusvirheen.

Veikkaisin, että avaimena toimii tuo neljän tavun mittainen LCG:llä generoitu luku ja kaikki neljä tavua tuosta käytetään siten, että tavupuskurien tavut käsitellään xor-operaatiolla yksi yhteen, mutta koska avain on lyhyempi niin otetaan käsiteltävän tavun indeksi modulo neljä.

Neutrino voisi valaista asiaa...

Neutrino [30.05.2021 15:09:07]

#

(Jatkoa viestiini 25.5.)

Sorttasin kolmen sarakkeen merkit esiintymismäärän mukaan. Olettaen, että salaus on tehty merkki kerrallaan, nyt kunkin sarakkeen eniten esiintyneiden merkkien tulisi suunnilleen vastata merkkien frekvenssiä suomenkielisessä tekstissä. Välilyönti on yleisin, sitten tulevat a, i, t, n, e ja s. Näiden jälkeen muiden kirjainten frekvenssit ovat siksi tasa-arvoisia, etten huomioinut niitä tässä vaiheessa. Tilasto vääristyy väistämättä lyhyessä, vain 255 merkin mittaisessa tekstissä.

Koska merkistö on UTF-8, ääkköset ym. erikoismerkit tuovat pienen lisämausteen keitokseen. Jokainen erikoismerkki myös vähentää merkkien määrää selväkielisessä tekstissä.

Syklin pituudesta vielä se verran, että ensin arvelin sen olevan neljä, mikä sopisi luontevammin bittien kääntelyyn. Jako neljään tuotti tuloksen 39, 39, 32 ja 33 merkkiä kussakin sarakkeessa, mikä ei vaikuttanut hyvältä. Jako kolmeen toimi paremmin.

Numero kolme viittaa siihen, että salaus olisi aritmeettinen, ei välttämättä looginen. Numero kolme tarjosi kelpo selityksen myös siihen, että tekstin pituus on 255 (eikä 256) merkkiä, koska 255 on nätisti kolmella jaollinen.

Kolmen sarakkeen yleisimmät merkit 85, 243 ja 50 esiintyvät yhteensä 30 kertaa, mikä vastaa täsmälleen välilyönnin tilastollista frekvenssiä. Mutta muuten sarakkeiden yhdistäminen tällä tavoin osoittautui vaikeaksi. Ainakin Excelillä. Niinpä kirjoitin ohjelman, joka käy läpi kaikki kombinaatiot ja vertaa tulosta aitnes-frekvenssiin. Syntynyt tilasto osoittaa, että tämä teoria oli umpikuja, palaan siis lähtöruutuun.

Sentään yksi hyödyllinen havainto em. tilastosta löytyi. Kolmen sarakkeen merkit 85, 243 ja 109 esiintyvät yhteensä (vain) 24 kertaa ja näiden sijainti vastaa 249 tapauksessa (255:stä) välilyöntien sijaintia yhden tietyn nettisivulta löytyvän rivin alussa. Kaikki muut merkkikombinaatiot ja rivit tuottivat huonomman tuloksen. Kyse voi olla onnekkaasta sattumasta, mutta lähempi tarkastelu osoitti, ettei näin olisi ja arvelinkin salatun viestin olevan:

The Alchemist ja Grez, asia on kuten kirjoitin, salausalgoritmi tulee valita tilanteen ja tarpeen mukaan. Netissä ja PC-ympäristÃssä vaatimukset ovat todennäkÃisesti aivan toiset kuin vaikkapa pienessä sulautetussa laitteessa tai jossakin vähäise

Tehtävänannossa oli mainittu, että salattava teksti olisi alku yhdeltä nettisivun riviltä. Tällaista tietoa ei tietenkään ole käytettävissä normaalisti salausta murrettaessa, ehkä halua hyödyntää tietoa ratkaisua etsiessäni. Niinpä unohdan paljastuneen viestin toistaiseksi ja keskityn salausmenetelmän etsimiseen.

255:stä merkistä 105 (41,2 %) osuu 32-merkin lohkoon 144-175 (12,5 %). Painotus on merkittävä ja vaikkei jakauma näytäkään täsmäävän aitnes-frekvenssiin oletan, että 105:stä merkistä ainakin enin osa on pienaakkosia (ASCII 96-127). Painotus säilyy melko tasaisena aineiston alusta loppuun, vaikka kasvaakin loppua kohden. Vastaava painotus näkyy lohkossa 32-63, mutta vähäisempänä (67 merkkiä, 26,3 %) ja merkkien määrä on liian suuri ollakseen pääosin suuraakkosia.

Tekstin ensimmäisen merkin (33) voisi arvella olevan suuraakkonen (ASCII 65-90) tai erikoismerkki.

Koska salausavainta ei ole, entropia selittyy kahdella tavalla. Joko merkit vaikuttavat toisiinsa ja/tai merkin indeksi (i) vaikuttaa salaukseen (ehkä muuten ja enemmän kuin modulo 3). Ensinmainittu tekisi salatun tekstin avaavan yhtälön vaikeaksi, mikä ei ole luultavaa tässä tapauksessa. Aloitan yksinkertaisimmasta teoriasta. Oletan, että (salaus) c = p xor f(i), jolloin (avaus) p = c xor f(i). Funktion ei tarvitse olla monotoninen, mikä on varmasti helpottanut sen muodostamista.

Kirjoitin funktion f(i) ympärille ohjelman, joka etsii yhteyttä indeksin ja salatun merkin kolmen ylimmän bitin välillä. Läpimurto puuttuu yhä, tämä on tuskainen homma ja rupesin jo epäilemään, onko salaus purettavissa ensinkään. Tehtävänannossa puhutaan "salaamisesta" lainausmerkeissä ja jos sillä tarkoitetaan merkkien sotkemista ilman toimivaa menetelmää palauttaa selkokielinen teksti, tämä työ on ajanhukkaa. Ehkei Metabolix sentään tällaista jäynää meille tarjoillut, joten jatkan etsimistä ja opiskelua aiheen parissa, kunhan taas löydän aikaa. Tällä välin, jatkakaa, olkaa hyvä.

Metabolix [30.05.2021 15:37:31]

#

Neutrino: Kyllä merkit voidaan palauttaa ja aivan yhtä helposti. Salaus on lainausmerkeissä, koska käytetty menetelmä ei täytä mitään nykymaailman vaatimuksia. Ja kuten mainitsin, kyseessä on yhden rivin koodi PHP:llä, (ihan normaalin koodirivin mittainen), ei mitenkään monimutkainen siis. Toki kielestä löytyy kaikenlaista valmiina funktiona, joten monella muulla kielellä koodia tulisi enemmän.

Neutrino [31.05.2021 14:50:03]

#

Metabolix kirjoitti:

kyseessä on yhden rivin koodi PHP:llä, (ihan normaalin koodirivin mittainen), ei mitenkään monimutkainen siis

Vilkaisin PHP:n funktioita ja todellakin, siellä on kaikenlaista! Myös valmiita, näppäriä työkaluja kryptaukseen.

Ethän sellaisia ole käyttänyt sentään? Jos olet, heitän suosiolla pyyhkeen kehään, sillä vaikka PHP:n kryptausfunktiot olisivat miten "kelvottomia" luotettavaan salaukseen, niitä on kuitenkin joku asiaa tunteva tarkkaan miettinyt. Ei siis mikään "jone", joten amatööri tuskin saa korkattua algoritmia ainakaan järjellisessä ajassa.

Tässä viestiketjussa olemme keskustelleet rakentavasti viestin salauksesta ja salauksen murtamisesta. PHP:n kryptausfunktioiden mukaanottaminen olisi vähän sama kuin wannabe taidemaalari ostaisi värien ja pensselien sijaan taidekauppiaalta valmiin taulun. Päämäärä on ehkä sama, taidetta seinälle, mutta taidemaalari olisi edelleen wannabe.

Metabolix [31.05.2021 15:16:32]

#

Neutrino kirjoitti:

Vilkaisin PHP:n funktioita ja todellakin, siellä on kaikenlaista! Myös valmiita, näppäriä työkaluja kryptaukseen.

Ei ole mistään kryptausfunktioista kysymys (ja niissähän pitäisi olla salausavain!) vaan todellakin ihan pelkästä pelleilystä. Varmaan myös tiedät, että mikään ”tarkkaan mietitty” oikea kryptausfunktio ei selittäisi havaintojasi kuten välilyöntien tunnistettavuus ja näkyvä kolmen sykli. Olet itse asiassa jo tehnyt niin monta olennaista havaintoa, että on melkein yllättävää, ettei ratkaisu ole vielä auennut. Ehkä kannattaa vielä miettiä, mikä yleinen algoritmi voisi selittää tuon kolmosen ja mitä siihen voisi vitsinä yhdistää, jotta tuloksena on salaus. (Spoileri: PHP:n gitistä voi löytää eräät asiaan liittyvät funktiot, jotka olen itse uusinut siellä.)

Tämä tehtävä onnistuikin hyvin demonstroimaan sitä, miksi algoritmin tunteminen tai edes testaaminen mustalla laatikolla on olennainen asia tietoturvassa. Jos vaikka pääsisit testaamaan, miten yhden merkin muutokset vaikuttavat lopputulokseen, asia olisi hetkessä selvä.

Neutrino [31.05.2021 21:11:13]

#

Metabolix kirjoitti:

Tämä tehtävä onnistuikin hyvin demonstroimaan sitä, miksi algoritmin tunteminen tai edes testaaminen mustalla laatikolla on olennainen asia tietoturvassa

Kiitän ohjauksesta. Viimeistään näillä vinkeillä minä taikka joku muu pystyy varmasti pulman ratkemaan. Pyydän, älä avita enempää, katoaa voitonriemu :)

Olet oikeassa, Black Box Testing on oleellisen tärkeää etenkin tietoturvassa. Siksipä juuri tuon oman tehtävänikin esitin. Palaan aiheeseen kohtapuoliin, ettei palkkion vaatija ilmoittaudu.

jalski [01.06.2021 16:54:50]

#

Metabolix kirjoitti:

Ehkä kannattaa vielä miettiä, mikä yleinen algoritmi voisi selittää tuon kolmosen ja mitä siihen voisi vitsinä yhdistää, jotta tuloksena on salaus.

Taisit ehkä helpottaa ratkaisua jo liikaa kun nyt rupesin miettimään tuota tavujen koodausta. Täytyy tuo vitsi osuus vielä miettiä...

jalski [02.06.2021 07:20:59]

#

jalski kirjoitti:

(01.06.2021 16:54:50): ”– –” Taisit ehkä helpottaa ratkaisua jo liikaa kun...

En ehtinyt vielä tietokoneen ääreen kokeilemaan, mutta olisiko: (tahattoman spoilauksen estämiseksi binäärinä) 62 61 73 65 36 34 20 2b 20 52 6f 74 2d 31 33 ?

jalski [02.06.2021 16:02:08]

#

jalski kirjoitti:

jalski kirjoitti:

(01.06.2021 16:54:50): ”– –” Taisit ehkä helpottaa ratkaisua jo liikaa kun...

En ehtinyt vielä tietokoneen ääreen kokeilemaan, mutta olisiko: (tahattoman spoilauksen estämiseksi binäärinä) 62 61 73 65 36 34 20 2b 20 52 6f 74 2d 31 33 ?

Nyt tuli kokeiltua! Kyllähän tuo Neutrinon arvelema kohta keskustelusta oli kyseessä ja 8th suoritui hommasta ihan kivasti:

0000000002fffd30 21 3b b2 55 14 9f 2f 6b b2 a0 9c a6 a8 f3 9d 2c !;.U../k.......,
0000000002fffd40 53 94 a7 32 3a 60 f3 ae a7 6c ae 55 3f 61 55 38 S..2:`...l.U?aU8
0000000002fffd50 35 a9 32 21 55 38 1c a7 37 22 9c a1 1c a2 f8 ed 5.2!U8..7"......
0000000002fffd60 a7 64 9f 2c a2 26 2c 99 1a a3 75 9c a9 3d 5c 55 .d.,.&,...u..=\U
0000000002fffd70 41 35 a1 32 32 55 43 2e a1 3c b4 2c 53 b4 9c 99 A5.22UC..<.,S...
0000000002fffd80 2e a1 a1 32 30 9e 2d 9f 34 6d a9 34 a5 a5 32 32 ...20.-.4m.4..22
0000000002fffd90 a2 f3 a0 a8 98 2e 2c 9e 21 55 1e 72 a9 3c a6 a7 ......,.!U.r.<..
0000000002fffda0 c0 71 55 37 2e 55 23 90 60 ac a0 a5 90 71 a7 3c .qU7.U#.`....q.<
0000000002fffdb0 a6 a9 90 76 a7 70 90 70 f3 b6 2c 94 b4 9c 9d 75 ...v.p.p..,....u
0000000002fffdc0 9f 70 32 a8 f3 a2 ab 34 b4 55 41 22 31 32 21 a1 .p2....4.UA"12!.
0000000002fffdd0 f0 71 9f c0 76 9c a0 32 a7 71 1c 55 34 9c ab 34 .q..v..2.q.U4..4
0000000002fffde0 a1 55 41 22 9c a0 32 a8 f3 9e a8 9c a1 55 43 2e .UA"..2......UC.
0000000002fffdf0 9c 98 1e 2c a3 ae 55 43 9c 30 9e 72 a7 70 90 70 ...,..UC.0.r.p.p
0000000002fffe00 f3 a6 a8 99 2e a8 a1 32 a9 42 26 a7 64 6d a1 34 .......2.B&.dm.4
0000000002fffe10 9c a9 41 32 30 a0 26 2c 53 b4 2c 9c 6d 9f 3f 66 ..A20.&,S.,.m.?f
0000000002fffe20 a7 64 9e 9c 9e 2d a9 f0 71 9d 90 71 9c a0 32    .d...-..q..q..2

00000000030018a0 54 68 65 20 41 6c 63 68 65 6d 69 73 74 20 6a 61 The Alchemist ja
00000000030018b0 20 47 72 65 7a 2c 20 61 73 69 61 20 6f 6e 20 6b  Grez, asia on k
00000000030018c0 75 74 65 6e 20 6b 69 72 6a 6f 69 74 69 6e 2c 20 uten kirjoitin,
00000000030018d0 73 61 6c 61 75 73 61 6c 67 6f 72 69 74 6d 69 20 salausalgoritmi
00000000030018e0 74 75 6c 65 65 20 76 61 6c 69 74 61 20 74 69 6c tulee valita til
00000000030018f0 61 6e 74 65 65 6e 20 6a 61 20 74 61 72 70 65 65 anteen ja tarpee
0000000003001900 6e 20 6d 75 6b 61 61 6e 2e 20 4e 65 74 69 73 73 n mukaan. Netiss
0000000003001910 c3 a4 20 6a 61 20 50 43 2d 79 6d 70 c3 a4 72 69 .. ja PC-ymp..ri
0000000003001920 73 74 c3 b6 73 73 c3 a4 20 76 61 61 74 69 6d 75 st..ss.. vaatimu
0000000003001930 6b 73 65 74 20 6f 76 61 74 20 74 6f 64 65 6e 6e kset ovat todenn
0000000003001940 c3 a4 6b c3 b6 69 73 65 73 74 69 20 61 69 76 61 ..k..isesti aiva
0000000003001950 6e 20 74 6f 69 73 65 74 20 6b 75 69 6e 20 76 61 n toiset kuin va
0000000003001960 69 6b 6b 61 70 61 20 70 69 65 6e 65 73 73 c3 a4 ikkapa pieness..
0000000003001970 20 73 75 6c 61 75 74 65 74 75 73 73 61 20 6c 61  sulautetussa la
0000000003001980 69 74 74 65 65 73 73 61 20 74 61 69 20 6a 6f 73 itteessa tai jos
0000000003001990 73 61 6b 69 6e 20 76 c3 a4 68 c3 a4 69 73 65    sakin v..h..ise

neosofta [02.06.2021 18:42:09]

#

Wautsi vau! Alan Turing 2 voitti 10 pointsia ja papukaijamerkin.

Metabolix [02.06.2021 18:58:16]

#

Harmi, että minun salaukseni ei oikeuta Prisman lahjakorttiin. Toivottavasti oli edes viihdyttävä.

jalski [02.06.2021 19:09:38]

#

Metabolix kirjoitti:

Harmi, että minun salaukseni ei oikeuta Prisman lahjakorttiin. Toivottavasti oli edes viihdyttävä.

Rehellisesti sanottuna Neutrino teki varsinaisen työn ja antamiesi viimeisten vihjeiden jälkeen piti vain pistää homma pakettiin...

Alla oma ratkaisuni:

"data.txt" f:slurp >s  /\s+/ "" s:replace! b:>hex constant data

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "" s:/ ( -1 s:@ nip ) a:map
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm" "" s:/ ( -1 s:@ nip ) a:map
m:zip

: rot13 \ s -- s
  ( literal over m:@ nip swap ?: ) s:map ;

: base64rot13  \ s -- s
  b:>base64 rot13 b:base64> >s ;

: app:main
  data base64rot13 . cr
  bye ;

Matti Holopainen [02.06.2021 20:56:28]

#

Mikä on Metabolix:in "ratkaisu", siis varmaankin yksi PHP-rivi, joka tuottaa alkuperäisen tekstin.
Haluaisin verrata sitä jalskin ratkaisuun.

L2-K2 [03.06.2021 01:54:00]

#

Matti Holopainen kirjoitti:

Mikä on Metabolix:in "ratkaisu", siis varmaankin yksi PHP-rivi, joka tuottaa alkuperäisen tekstin.
Haluaisin verrata sitä jalskin ratkaisuun.

Veikkaisin jotain tämänkaltaista (valtaosa koodista on tuon heksadesimaaliesityksen muuttamiseksi tavuiksi.

<?php

$hexString="213bb255149f2f6bb2a09ca6a8f39d2c5394a7323a60f3aea76cae553f61553835a9322155381ca737229ca11ca2f8eda7649f2ca2262c991aa3759ca93d5c554135a1323255432ea13cb42c53b49c992ea1a132309e2d9f346da934a5a53232a2f3a0a8982e2c9e21551e72a93ca6a7c07155372e55239060aca0a59071a73ca6a99076a7709070f3b62c94b49c9d759f7032a8f3a2ab34b4554122313221a1f0719fc0769ca032a7711c55349cab34a15541229ca032a8f39ea89ca155432e9c981e2ca3ae55439c309e72a7709070f3a6a8992ea8a132a94226a7646da1349ca9413230a0262c53b42c9c6d9f3f66a7649e9c9e2da9f0719d90719ca032";

$hex='';
for ($i=0;$i<strlen($hexString)-1;$i=$i+2){
    $hex.=chr(hexdec($hexString[$i].$hexString[$i+1]));
}

$cleartext=base64_decode(str_rot13(base64_encode($hex)));
echo $cleartext;

$ciphertext=base64_decode(str_rot13(base64_encode($cleartext)));
echo $ciphertext;

Metabolix [03.06.2021 10:55:29]

#

Matti Holopainen kirjoitti:

Mikä on Metabolix:in "ratkaisu", siis varmaankin yksi PHP-rivi, joka tuottaa alkuperäisen tekstin.
Haluaisin verrata sitä jalskin ratkaisuun.

Minunhan ei tarvinnut pyöritellä tuota heksamuotoa, jossa data on dumpattu foorumille, joten oma PHP-koodini oli yksinkertaisesti:

Foorumille dumppaukseen käytin tavallisia Linux-ohjelmia:

php hassutus.php < teksti.txt | hexdump -C | cut -b 11-58

L2-K2:n versio datan muunnoksesta on turhan vaikea, sillä PHP:ssä on valmiiksi hex2bin, jolla muunnos onnistuu. Seuraava skripti ottaa heksadatan välilyönteineen ja tulostaa sen binäärinä; koodi soveltuu taas komentoriviltä käytettäväksi.

<?php echo hex2bin(preg_replace('/[^0-9A-Fa-f]/s', '', stream_get_contents(STDIN)));

Jos näistä haluaa yhdistää L2-K2:n tyyliin purun ja tulostuksen mutta niin, että syöte tulee tiedostosta ja tuloste tulee heksamuodossa, se onnistuu näin:

<?php
$hex = file_get_contents("heksa.txt");
$data = hex2bin(preg_replace('/[^0-9A-Fa-f]/s', '', $hex));
$data2 = base64_decode(str_rot13(base64_encode($data)));
$hexdump = fn($s) => chunk_split(chunk_split(bin2hex($s), 2, " "), 16*3);

echo $hexdump($data2), "\n", $hexdump($data);

Metabolix [16.06.2021 12:23:38]

#

Palaan vielä alkuperäiseen algoritmiin:

jone2712 kirjoitti:

Ei paljon valaise, jos 0-frame on nolla vielä kryptauksen jälkeenkin. Todella typerää väittää, että 0-blokki sisältäisi jotain oleellista informaatiota?

Ensinnäkin, jos tosiaan 0-blokki olisi salauksen jälkeen sama, se olisi erittäin paha juttu. Hyvän salauksen tärkein mittari on nimenomaan se, että salattu data ei suoraan paljasta alkuperäistä dataa missään tilanteessa.

Toiseksi, kritiikkini koski sitä, että nolla-avaimella salaus ei muuta tekstiä ollenkaan. Tärkeintä ei ole edes se, voiko nolla-avaimella salata mitään, vaan havainto herättää huolen, onko myös yleisemmin avaimen yhteys lopputulokseen mahdollista jäljittää, kun kerran nolla-avaimella tulos on näin räikeä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta