Kauppaholvi

Tietoturva · tietosuoja · todistusvoima

Kauppaholvi: kauppakirja, jota ei voi muuttaa huomaamatta eikä lukea ilman avainta.

Jokainen korttien ostokauppa alkaa asiakkaan omalla puhelimella ja allekirjoitetaan tiskillä. Henkilötiedot ovat salattuina joka hetki, jokainen tapahtuma jää katkeamattomaan todistusketjuun, ja tiedot tuhoutuvat itsestään, kun säilytysaika päättyy.

0selväkielistä nimeä, osoitetta tai tilinumeroa levyllä tai varmuuskopiossa
AES-256salaus, oma avain jokaiselle ostokaupalle
5 v · 6 vhenkilötiedot tuhoutuvat automaattisesti, tosite säilyy kirjanpitolain vaatiman ajan
1 ketjujokainen loki- ja sinettirivi sisältää edellisen rivin tiivisteen
Helsinkipalvelin Suomessa, jokaisella liikkeellä oma osoite ja omat avaimet

1 · Salaus

Vaikka koko levy varastettaisiin, siltä ei löydy yhtäkään nimeä.

Käytössä on sama malli, jota pankit ja pilvipalvelut käyttävät sisäisesti: kirjekuorisalaus. Tiedot avataan vain sillä hetkellä, kun joku, jolla on siihen oikeus, niitä katsoo.

  • Oma avain jokaiselle ostokaupalle. Yhden kaupan avaaminen ei avaa muita. Kaupan avain on itse salattu pääavaimella, jota ei ole koskaan tietokannassa, koodissa eikä varmuuskopiossa.
  • Pääavain paperilla kassakaapissa. Palvelimella se on vain keskusmuistissa. Jos palvelin varastetaan, tiedot ovat varkaalle lukukelvottomia. Jos taas kassakaappi katoaa, tiedot ovat yhä tallessa palvelimella salattuina.
  • Salaus alkaa ensimmäisestä näppäilystä. Asiakkaan lomake tallennetaan salattuna jo luonnosvaiheessa. Puhelimeen tai iPadiin ei jää mitään.
  • Sukunimihaku ilman selväkielisiä nimiä. Haku käyttää ”sokeaa indeksiä”: tarkalla sukunimellä kaupat löytyvät, mutta indeksistä ei voi lukea yhtään nimeä.
  • PIN ja syy jokaiselle avaukselle. Työntekijä näkee henkilötiedot vain käynnissä olevan kaupan aikana, PIN-koodin takana. Jälkikäteinen avaus vaatii kirjatun syyn ja jää lokiin: kuka, milloin, mikä kauppa, miksi.
  • Automaattinen hälytys. Jos henkilötietoja avataan yli 20 kertaa tunnissa, omistaja saa ilmoituksen.
  • Tositteet omalla pitkäikäisellä avaimella. Kirjanpidon PDF säilytetään pidempään kuin henkilötiedot, joten sillä on oma arkistoavain.
KAUPPA #4711 nimi ▮▮▮▮▮▮▮▮▮▮▮ osoite ▮▮▮▮▮▮▮▮▮▮▮ IBAN ▮▮▮▮▮▮▮▮▮▮▮ AES-256-GCM · kaupan oma avain KAUPAN AVAIN salattu pääavaimella PÄÄAVAIN palvelimen muisti + paperi kassakaapissa LEVY · VARMUUSKOPIO sisältää vain salattua · ei avaimia 5 v: avain tuhotaan → data mykkä
Kirjekuorisalaus. Avaimen tuhoaminen viiden vuoden kuluttua tekee kaupan henkilötiedoista lukukelvottomia myös jokaisessa vanhassa varmuuskopiossa.

2 · Todistusketju

Sama periaate kuin lohkoketjussa, ilman lohkoketjun painolastia.

Lohkoketjun todistusvoima ei tule kryptovaluutasta, vaan yhdestä ideasta: jokainen rivi sisältää edellisen rivin sormenjäljen. Kauppaholvi käyttää samaa ideaa omassa tietokannassaan ilman louhintaa, kryptopoletteja tai ulkopuolista verkkoa.

RIVI 1 LUOTU edel. — h=9f3a… RIVI 2 TARJOUS edel. 9f3a… h=c71e… RIVI 3 ALLEKIRJ. edel. c71e… h=02bd… RIVI 4 MAKSETTU edel. 02bd… h=e4a0… Jos riviä 2 muutetaan jälkikäteen, sen tiiviste muuttuu, eikä rivin 3 ”edel.” enää täsmää.
Tiivisteketju. Katkos näkyy tarkistuksessa. Tarkastuslokiin ja allekirjoitussinetteihin voi vain lisätä rivejä: sovelluksella ei ole edes tietokantaoikeutta muokata tai poistaa niitä.
  • Allekirjoitettava sisältö lukitaan sormenjäljeksi ennen allekirjoitusta. Jälkikäteen ei voi väittää, että sovittiin jostain muusta. Sormenjäljen voi laskea uudelleen vuosienkin päästä, ja tulos täsmää.
  • Ketju tarkistetaan automaattisesti viikoittain. Tulos kirjataan omaan lokiinsa. Mahdollinen katkos havaitaan varmasti, eikä sitä tarvitse arvailla.
  • Kaksi samanaikaista kirjoitusta ei voi haarauttaa ketjua. Tietokantatason lukko varmistaa, että rivit syntyvät yksi kerrallaan.
  • Varmuuskopion palautuksessa tehdään sama tarkistus. Palautettua tietokantaa ei oteta käyttöön, ennen kuin ketju on todettu ehjäksi.
  • Mitä tämä ei ole. Ei julkista lohkoketjua, ei kryptovaluuttaa, ei tietojen viemistä ulkopuoliseen verkkoon. Todistusvoima syntyy matematiikasta, ei markkinointisanasta.

3 · GDPR ja lait

Tiedot säilyvät määräajan, eivät päivääkään pidempään.

Säilytysaika on ohjelmoitu järjestelmään, ei muistilappuun. Kirjanpitolain kuusi vuotta ja henkilötietojen viisi vuotta ovat kaksi eri kelloa, ja järjestelmä seuraa molempia. Viiden vuoden ajan alkamishetki (kauppa vai asiakassuhteen päättyminen) tarkistetaan lakimieheltä ennen käyttöönottoa.

Kaupan aikanaVain kaupan tarpeisiinTyöntekijä näkee henkilötiedot PIN-koodin takana kaupan ollessa käynnissä. IBAN kysytään vain silloin, kun maksu menee tilille. Jos myyjä on alaikäinen, huoltajan on oltava paikalla, ja hänen tietonsa kirjataan.
5 vuottaHenkilötiedot tuhoutuvatOstokaupan oma salausavain hävitetään automaattisesti. Nimi, osoite ja tilinumero muuttuvat lukukelvottomiksi myös kaikissa varmuuskopioissa. Tätä kutsutaan kryptografiseksi silppuamiseksi.
6 vuottaTosite poistuuKirjanpitolain (1336/1997) mukaan tositteet säilytetään kuusi vuotta sen vuoden lopusta, jonka aikana tilikausi päättyi. Tositteessa on vain lain vaatimat tiedot: ei syntymäaikaa, puhelinnumeroa, sähköpostia eikä IBANia.
  • Kirjanpitäjä ei ole järjestelmän käyttäjä. Hän saa kuukausittain salatun tositepaketin, ei pääsyä henkilötietoihin.
  • Rekisteröidyn oikeudet on toteutettu valmiiksi. Tietojen tarkastus (tietosuoja-asetuksen 15 artikla), poisto (17 artikla) ja käsittelyn rajoittaminen (18 artikla) ovat järjestelmässä omia toimintojaan. Pyytäjän henkilöllisyys tarkistetaan liikkeessä henkilöllisyystodistuksesta, ei sähköpostilla.
  • Poisto-oikeus ja kirjanpitolaki on sovitettu yhteen. Henkilötiedot voidaan hävittää pyynnöstä. Tosite säilyy lain vaatiman ajan, ja siinä on vain kirjanpidon edellyttämät tiedot.
  • Marginaaliverotus valmiina. Kauppakirja tuottaa marginaaliverotusmenettelyn vaatiman tositteen, kun myyjä ei ole alv-velvollinen.
  • Rahanpesulaki selvityksessä. Samalle myyjälle kertyvät käteisostot ovat avoin kysymys, johon pyydetään lakimiehen kanta ennen käyttöönottoa.
KukaHenkilötiedotKauppahistoriaPDF:t ja salauksen purku
AsiakasOmansa, kauppakohtaisella linkilläEiOma kuitti, rajattu linkki
TyöntekijäVain käynnissä olevasta kaupasta, PINIlman henkilötietojaEi
VastaavaKirjatulla syylläKylläKyllä, lokiin
OmistajaKirjatulla syylläKyllä + tarkastuslokiKyllä, lokiin
KirjanpitäjäEiEiKuukausipaketti salattuna

4 · Verkko ja laitteet

Internetistä näkyy vain asiakkaan oma sivu. Tiskin näkymä ei ole olemassa ulkopuoliselle.

Sovellus on jaettu kolmeen vyöhykkeeseen. Julkisessa osoitteessa vastaa vain asiakassivu. Kaikkiin muihin osoitteisiin vastaus on ”ei löydy”, eikä edes kirjautumissivu näy.

  • Työ- ja raportointivyöhyke vain salatun tunnelin kautta. Tiskin iPad ja omistajan kone liittyvät palveluun WireGuard-yhteydellä. Ulkopuolinen skanneri ei näe edes, että kirjautumissivu on olemassa.
  • Jokainen laite rekisteröidään erikseen. Rekisteröintiin tarvitaan kertakäyttöinen koodi, joka on voimassa kymmenen minuuttia. Kadonneen iPadin pääsyn voi katkaista heti yhdellä toimenpiteellä.
  • Salasana ei yksin riitä mihinkään. Tiskillä tarvitaan salasana, rekisteröity laite ja PIN. Raportointiin tarvitaan salasana, rekisteröity laite ja sähköpostiin tuleva kertakoodi.
  • Kukaan ei tiedä toisen salasanaa. Uusi työntekijä saa sähköpostiin kertakäyttöisen linkin ja asettaa salasanansa itse. Omistaja ei näe eikä kirjoita kenenkään salasanaa. Unohtunut salasana hoidetaan uudella linkillä, ja linkin käyttö katkaisee kaikki vanhat istunnot. Oman salasanan vaihto lukittuu 15 minuutiksi viiden väärän yrityksen jälkeen.
  • Istunto päättyy 24 tunnin kuluttua, vaikka se olisi jatkuvasti käytössä. Salasanan ja asiakaslinkin arvausyrityksiä rajoitetaan automaattisesti, ja rajan ylittävät yritykset hylätään, ennen kuin ne kuormittavat palvelinta.
  • Toinen tekoälymalli tarkastaa koodin. Koodin on tarkastanut toinen, riippumaton tekoälymalli nimetyillä riskialueilla (salaus, todistusketju, asiakasreitit, asennus). Löydökset on tarkistettu koodista ja korjattu. Sama tarkastus tehdään jokaiselle muutokselle, joka koskee kirjautumista, salausta tai todistusketjua.
  • Palvelin Helsingissä, Postgres suljettuna. Tietokantaan ei saa yhteyttä internetistä lainkaan. Käyttöjärjestelmän tietoturvapäivitykset asentuvat automaattisesti.
  • Tiedot eivät häviä, vaikka palvelin tuhoutuisi. Varmuuskopio otetaan joka tunti ja siirretään salattuna palvelimen ulkopuolelle. Salausavaimet eivät kulje kopion mukana. Palautus harjoitellaan erillisellä koneella ennen käyttöönottoa, ja omistaja saa hälytyksen, jos kopio jää lähtemättä.
ASIAKAS julkinen internet oma puhelin QR tai linkki /s/… vain oma kauppa muut polut: 404 TYÖ vain tunnelista tiskin iPad rekisteröity laite salasana + PIN henkilötiedot vain kaupan aikana ei PDF-avausta RAPORTOINTI vain tunnelista omistajan kone rekisteröity laite salasana + kertakoodi tarkastusloki, vienti ei salauksen purkua
Vyöhykejako. Raportointivyöhyke ei pysty purkamaan henkilötietojen salausta. Sen varmistaa koodin rakennetta tutkiva testi, ei pelkkä lupaus.

5 · Asiakkaan kokemus

Ei sovellusta, ei tunnuksia, ei jonottamista lomakkeen kanssa.

Asiakas hoitaa oman osuutensa puhelimellaan samalla, kun kortteja arvioidaan. Tiskille jää vain allekirjoitus.

  1. QR tiskiltäTyöntekijä avaa kaupan, ja asiakas lukee QR-koodin. Linkki on kauppakohtainen ja voimassa vain saman päivän.
  2. Omat tiedot puhelimellaAsiakas antaa nimensä, osoitteensa ja tunnistetietonsa. Ne salataan heti, ja sillä välin asiakas voi kierrellä liikkeessä.
  3. Ehdot rauhassa luettavaksiSopimusehdot näkyvät puhelimessa heti tietojen jälkeen. Niiden kuittaaminen puhelimessa on vapaaehtoista. Tiskillä ehdot ovat aina yhden napautuksen päässä, ja allekirjoitus tehdään aina tiskillä.
  4. Tarjous puhelimeenAsiakas valitsee rivi riviltä ”Myyn” tai ”Pidän” ja päättää omaan tahtiinsa ilman painostusta.
  5. Allekirjoitus tiskilläYhteenveto ja allekirjoitus iPadilla. Sisältö lukitaan sormenjäljeksi ennen kynän kosketusta.
  6. Kuitti linkistäKuitin voi ladata seuraavan päivän klo 21 asti, enintään kolme kertaa. Sen jälkeen uuden saa vain tiskiltä henkilöllisyyden tarkistamisen jälkeen.

6 · Mitä tarkoituksella ei tehdä

Rehellinen lista siitä, mitä versio 1 ei sisällä.

Jokainen näistä on päätös, ei unohdus. Osa tulee versiossa 1.1, osa jätetään pois pysyvästi.

Ei natiivia mobiilisovellustaApple-kehittäjätilin vanheneva sertifikaatti voisi kaataa sovelluksen kesken kaupanteon. Selain ja kotinäytön pikakuvake riittävät.
Ei avaimia pilvessäPalvelu toimii yhdellä palvelimella Helsingissä, ja sen avaimet ovat kassakaapissa. Varmuuskopiot säilytetään salattuina Cloudflaren R2-tallennuksessa EU-alueella. Sinne päätyy vain salattua dataa ilman avaimia.
Ei tekstiviestivahvistusta versiossa 1Tulossa versiossa 1.1 yhdessä virallisen aikaleimapalvelun (RFC 3161) kanssa.
Ei markkinahinnan automaattihakuaHinta ja sen lähde (Cardmarket, eBay) syötetään ja kirjataan käsin. Vastuu hinnasta pysyy ihmisellä.
Ei push-ilmoituksiaYhden huoneen myymälässä työntekijän huuto on luotettavampi kanava kuin ilmoitus, joka voi jäädä huomaamatta.
Ei ”Unohdin salasanani” -painikettaKirjautumissivulla ei ole itsepalvelunollausta, jota voisi käyttää hyökkäyksen apuna. Uuden salasanalinkin lähettää aina omistaja.