Bitcoinlompakko PIC 18F2550:lla

Suunnitelma

Tässä Bitcoin rautalompakossa on muitakin toimintoja, jotka on tulleet aikaisempien kokeilujen mukana tähänkin projektiin mukaan. Noista toiminnoista on vain nyt valittu tähän suunnitelmaan vain ne, jotka tarvitaan Bitcoinien siirtelyyn ja saldon tiedusteluun napeilla ja tekstiviesteillä. Mutta jatkoideoissa noista muista toiminnoista on kehitetty sitten erilaisia sovellutuksia lisää…

Bitcoinlompakoista lyhyesti taustatiedoksi

Bitcoinlompakkoja on saatavilla kännyköihin ja tietokoneelle ladattavina, että myös internetissä toimivina WEB-lompakoina. Kuten Blockchainin lompakko. Jota tässä projektissa nyt tullaan käyttämään sen lompakko API-rajapinnan takia, jolla tehdään Bitcoinsiirrot. Itse kumminkin aloitin Bitcoinlompakoihin tutustumisen noin vuosi takaperin sitten tämän tekstin kirjoitushetkestä tietokoneelle suoraan asennettavalla Bitcoinlompakolla. Käyttämäni lompakko on Multibitlompakko. Ja joka on myös saatavilla suomenkielellä.

Bitcoinlompakon toiminnot ja tietoturva lyhyesti

Bitcoinlompakko kykenee avaamaan Bitcointilin. Johon sisältyy yleensä yksi osoite, joka vastaa tilinumeroa tavallisissa pankeissa. Osoitteita voi luoda halutessa myös lisää.

Nuo osoitteet luodaan arvotulla useita merkkejä pitkällä yksityisavaimella johon liittyy tietoturva. Yksityisavain on Bitcoinlompakon tärkein asia ja sen hukkaaminen tai joutuminen vääriin käsiin tarkoittaa sitä, että Bitcoinlompakossa olleet Bitcoinit on menetetty.

Joten tuo yksityisavain on Bitcoinlompakon tarkoin varjeltu tieto ja yleensä se kannattaakin varmuuskopioida ja salata. Tämä pitäisi onnistua ainakin tietokoneella olevilla lompakko-ohjelmilla ja jotkut WEB-lompakotkin antaa tarvittaessa yksityisavaimen käyttäjänsä haltuun. Itse asiassa jos ei anna niin moista lompakkoa ei kannata edes käyttää ainakaan suurilla summilla.

Yksityisavain kykenee siis palauttamaan lompakon eri lompakko-ohjelmissa ja WEB-lompakoissa. Ja tietty allekirjoittamaan halutut siirrot Bitcoinlompakossa olevissa varoista. Ilman allekirjoitusta siirtoja ei tapahdu Bitcoinverkossa.

Yhteenveto Bitcoinlompakoista

Eli yhteenvetona Bitcoinlompakon yksityisavain on tärkein asia. Ja se on myös tässä projektissa homman suurin ”päänsärky” tietoturvan suhteen. Josta lisää seuraavaksi.

Syy lompakko API-rajapinnan käyttään eli ”päänsäryn” hoito

Aikaisemmin mainitsin, että tässä rautalompakossa tullaan käyttämään Blockchainin lompakko API:a. Ja Blockchainin lompakkoa. Tähän on syynä Bitcoinjärjestelmän vaatimat siirronpohjan ja sen vaatiman allekirjoituksen vaatimat laskutoimitukset, jotka pitää tehdä yksityisavaimesta. Niihin ei ole olemassa valmista assembly-koodia, jolla ne voisi muodostaa. Ja koodin tekeminen olisi liian hankalaa ja monimutkaista, joten turvaudun lompakko API-rajapintaan.

Lompakko API-rajapinta myös lisää tietoturvaa, koska yksityisavainta ei tarvitse käsitellä. Lisäksi lompakko API-rajapinta käyttää salasanoja ja idefiointitunnusta siirron aikaan saamiseksi. Nuokin voi säilyttää WEB-palvelimella piilossa. Jonne Bitcoinrautalompakko ottaa yhteyden tässä projektissa eli osoitteeseen www.innopultti.fi/projekti/sim908/bitcoin/data.php .

Ja kertoo tuolle data.php:lle Bitcoinsiirtoon liittyen osoitetiedon mistä siirretään ja minne sekä miten paljon Bitcoineja. Tästä syystä tämä rautalompakko ei voi sanoa olevan täysverinen Bitcoinrautalompakko. Vaan paremminkin etäkäyttölompakko. Miten joskus tulevaisuudessa tästä saisi täysverisen rautalompakon niin siitä lisää ”Jatkoideat” kohdassa.

Bitcoin rautalompakon toiminnot

Rautalompakon toiminnot on tässä kokeilussa hyvin yksinkertaiset. Syystä että tämä pitää koodin edes hieman helpompana ymmärtää assembly-koodia, jotta siitä voisi tehdä uusia sovellutuksia tulevaisuudessa. Tämän projektin pohjana on aikaisempaa koodia, joilla GSM/GPS SIM908-modulin olen saanut toimimaan PIC 18F2550 mikro-ohjaimella ja sen erinäisiä toimintoja. Tuota koodia on tullut perattua ja yritettyä muokata helpommin ymmärrettävään muotoon. Ja tätä kirjoitettaessa sen muokkaaminen näyttää tältä:

Tuon koodin saatan julkaista ehkä ensin kohtuu ”sotkuisena” koodina, jota sitten tulee yritettyä muunnella siistimpään muotoon joista parempia versioita tulee varmaan ladattua kaikille jakoon iloksi ja harmiksi. Mutta pidemmittä puheitta sitten toimintoihin mitä lompakko toteuttaa.

Alkuasetuksien antaminen tekstiviestillä lompakolle

Rautalompakko ottaa tarvittavat alkuasetukset vastaan tekstiviestillä, jotka voi lähettää kännykällä. Asetukset sisältää lompakon tunnisteen (max 10 merkkiä) joka on nyt vaikka: ”Bitcoin”. MD5-tarkastussummalle (max 19 merkkiä): ”suolasana”. GSM-operaattorin (tässä projektissa operaattori on DNA.) APN-tunnisteen max 19 merkkiä):”internet”. WEB-palvelimen polun (max 85 merkkiä), missä sijaitsee tiedon vastaanottava data.php sivu.

Eli tekstiviesti tässä kokeilussa on tälläinen:


”T:Bitcoin S:suolasana A:internet P:innopultti.fi/projekti/sim908/bitcoin/data.php muista välilyönnit”

Tekstiviestissä lukee vielä teksti ”muista välilyännit”. Jolla erotellaan tiedot ja lopuksi päätetään asetusten antaminen. Ilman väliyöntiä rautalompakon ohjelmisto ei ymmärrä että asetukset päättyi. Eli tuota ”muista välilyönnit” tekstiä ei välttämättä edes tarvita vain se välilyönti asetuksien loppuun ja väleihin täytyy tehdä, jotta lompakon ohjelmisto tajuaa asetukset ja niiden loppumisen.

Ja lopuksi kun lompakko on saanut asetukset se palauttaa ne vielä siihen numeroon tekstiviestinä josta ne on tulleet. Näin voi varmistua että asetukset meni perille. Näin ollen Bitcoin rautalompakko on valmis ottamaan seuraavaksi muut asetukset WEB-palvelimelta ja käyttöliittymältä, kuten Bitcoin osoitteet. Josta seuraavaksi…

WEB-palvelin käyttäliittymäsivusto ja data.php sivu

Tämä Bitcoin rautalompakko ottaa siis yhteyden otsikossa mainittuun data.php sivuun. Tuo sivu ottaa lompakolta vastaan erilaisia muuttujia ja suorittaa myös Bitcoin API-rajapinnan ajamisen Blockchainin lompakko API-rajapinnan kanssa, jotta Bitcoin siirrot tapahtuisi. Samoin data.php sivu lähettää erilaisia asetuksia lompakolle WEB-palvelimelle olevalta WEB-käyttöliittymäsivustolta, josta seuraavaksi.

WEB-käyttöliittymäsivusto lyhyesti

Bitcoin rautalompakko ottaa siis vielä asetuksia vastaan myös erilliseltä WEB-käyttöliittymältä. Tämä WEB-käyttöliittymä osaa palvella tarvittaessa useita lompakoita. Ja antaa niille asetuksia. Samoin kuin hoitaa itse Bitcoinien siirrot lompakko API-rajapinnan avulla.

WEB-käyttöliittymältä saadut asetukset kertoo lompakolle kytketäänkö esimerkiksi GPS-päälle tai pois päältä. Tai mitä tehdään saapuvalle puhelulle eli lyödäänkö luuri korvaan vai vastataanko. Tai sitten välitetäänkö lompakolle saapuneet tekstiviestit internettiin data.php sivulle. Joka voi vaikka niiden perusteella tehdä Bitcoinsiirtoja tarvittaessa.

Tai tallennetaan Bitcoin rautalompakon EEPROM-muistiin dataa, jonne mahtuu 85 merkkiä maksimissaan. Esimerkiksi tässä projektissa sinne tallennetaan mistä Bitcoinosoitteesta siirretään Bitcoineja ja minne osoitteeseen ja paljon. Tästä lisää myöhemmin.

Lisäksi WEB-käyttöliittymä voi muodostaa lokia halutuista tiedoista mitä lompakko lähettää muuttujien mukana. WEB-käyttöliittymän kautta lompakko voi myös soittaa tai lähettää tekstiviestejä tarvittaessa. Sekä lähettää LCD-näytölle viestejä.

Eli WEB-käyttöliittymä mahdollistaa tulevaisuudessa varmaan monenlaisten erilaisten sovellusten rakentamisen mahdollisten tulevaisuuden Bitcoin rautalompakoiden varaan joita ei edes vielä osata ajatella. Vai miltä kuullostaisi vaikka lompakko, jossa on alkometri sisäänrakennettuna, johon puhaltamalla maksut hyväksytään???

Itse asiassa kaikkia ideoita mitä nyt olen päähäni saanut. Niin niitä ei tähän projektiin tule tehtyä, koska tämä projekti kasvaisi pian liian isoksi kokeiluksi. Mutta joka tapauksessa myös WEB-käyttöliittymän lähdekoodit tulee jakoon toteutusosiossa siinä missä itse lompakonkin PIC 18F2550 tuleva koodi.

Laitetaan vielän kuva miltä Bitcoin rautalompakon WEB-käyttöliittymän hakemisto näyttää tämän tekstin kirjoitushetkellä WEB-palvelimella.

Jatketaan lompakon toiminnoista Bitcoinsiirron toteutuksella

Bitcoin rautalompakko odottaa siirtonapin painamista Bitcoin siirron käynnistämiseksi. Jonka jälkeen siirto tapahtuu ottamalla ottamalla WEB-palvelimeen yhteyttä. Jonne rautalompakko toimittaa SIM908 GSM/GPS-modulilla tiedon eeprom-muuttujassa Bitcoin osoitteesta, josta siirretään Bitcoineja ja osoitteen jonne siirretään Bitcoineja. Sekä Bitcoin määrän satosheissa. Eli eeprom-muuttujan mukana tulee data.php sivulle tälläinen lause:

1PgsEFx3zAQijqw11fnsL6btmWHpVYtBxC>100>1CggAg8JTqdZK9ju8UU2yKxSQoE94uiL7R

Osoitteiden linkit Blockchain.info sivustolle, joka näyttää tapahtuneet siirrot jne.

1PgsEFx3zAQijqw11fnsL6btmWHpVYtBxC

1CggAg8JTqdZK9ju8UU2yKxSQoE94uiL7R

Noissa osoittessa ja niissä olevaa Bitcoin määrää nyt siirrellään tässä projektissa koemielessä. Eli siis ylempänä kuvattu lause on syötetty alla näkyvässä kuvassa WEB-käyttöliittymän asetukset.php sivun kohdassa ”EEPROM-muistiin talteen:” ja tallennettu Bitcoin rautalompakon EEPROM-muistiin, kun lompakko on hakenut asetuksia EEPROM-muistiin tallennettavaksi.

Tuossa lauseessa > -merkki helpottaa WEB-palvelimelle Bitcoin rautalompakolta eeprom-muuttujassa takaisin päin tulleen datan paloittelua WEB-palvelimella data.php-sivulla ”$eepromrajaytetty”-taulukkomuuttujaan. Tämän koodi esimerkin mukaisesti: ”$eepromrajaytetty = explode(”>”, $eeprom);”. Ja sitä myöten käsittelyä, jotta siirto olisi helpompi tehdä.

Lause puretaan siis vasemmalta oikealle. Niin että ensin tulee Bitcoinosoite josta siirretään Bitcoineja. Ja seuraavan > -merkin jälkeen tulee summa satosheissa. Summaa seuraavan viimeisen > -merkin jälkeen tulee lopuksi Bitcoinosoite minne summa halutaan siirtää.

Lisäksi rautalompakko lähettää muitakin muuttujia WEB-palvelimelle. Muun muuassa MD5-tarkastussumman cf-muuttujassa. MD5-tarkastussumma lasketaan rautalompakolla WEB-palvelimelle lähetettävistä muuttujista. Joita on GPS-koordinaatit, GPS-satelliittien määrä, GSM-signaalin voimakkuus. Ainoastaan niin sanottua suolasanaa ei lähetetä WEB-palvelimelle rautalompakolta. Sillä se on sille annettu jo erikseen WEB-palvelimelle.

Näistä muuttujista rautalompakko ja WEB-palvelin sitten laskee MD5-tarkastussumman. Ja kun MD5-tarkastussumma täsmää WEB-palvelimella ja siirtonappia on painettu. Niin lompakko API ajetaan sisällyttäen siihen rautalompakolta saadut osoitteet ja Bitcoin summat. Jolloin Bitcoinit siirtyy osoitteesta toiseen jos kaikki meni kohdalleen. Eli siinä on pääpiirteittäin rautalompakon toiminnot, jotta Bitcoinit siirtyisi.

Bitcoinien siirto tekstiviestillä

Lisäksi tuon Bitcoin siirron voisi tehdä myös lompakolle lähetetävällä tekstiviestillä. Jolloin myös WEB-käyttöliittymän data.php-sivu lukisi muuttujan tekstiviesti sisällön, joka olisi tullut lompakolta jos tekstiviestien luku on kytketty asetukset.php sivulla päälle.

Tekstiviesti voisi olla esimerkiksi tälläinen: ”O1>10000>O2” . Jolloin data.php tulkitsisi tekstiviestin niin, että maksetaan 10000 satoshia osoitteesta 1 osoitteesen 2. Nämä osoitteet tulee nyt tämän lompakon EEPROM-muistista, jonne ne on annettu asetukset.php sivulla aikaisemmin kerrotun mukaisesta napilla tapahtuvan siirron toteuttamiseksi.

Eli tekstiviesti siirrossakin käytetään jo lompakon EEPROM-muistiin tallennettuja osoitteita, jotka siirtää Bitcoineja tekstiviestin mukaisesti vaihtaen tekstiviestin mukaan osoitteiden siirtojärjestystä eli mistä minne ja siirrettävän summan määrän. Välittämättä siitä miten siirtojärjestys ja siirrettävä summa on määritelty lompakon EEPROM-muistiin kun siirto tapahtuu napilla. Näin homma pysyy vielä kohtuullisen ”yksinkertaisena” ja noiden osoitteiden mistä minne järjestys muokataan tekstiviestin mukaan WEB-palvelimella.

Tietoturva tekstiviesti siirrossa taas voisi hoitaa tulleen tekstiviestin numeron tunnistamalla, joka tulisi myös muuttujien mukana data.php-sivulle Bitcoin rautalompakolta. Näin ollen mitään siirtoja tekstiviestillä ei tapahdu jos numero ei täsmää. Mutta jätän tuon nyt tällä erää toteuttamatta. Vaikka sen toteuttaisi helposti PHP-kielellä WEB-palvelimella.

Yhteenveto lopuksi rautalompakon toiminnoista kuvien kera

Eli koska tämä Bitcoin rautalompakko on yksinkertaisuuden säilyttymiseksi mahdollisten tulevaisuuden projektien pohjana käyttämiseksi helposti ja sujuvasti. Niin toimintoja on vain ”vähän”.

Ensin Bitcoin rautalompakko ottaa tekstiviestillä alkuasetukset vastaan tämän kaavion mukaisesti:

Alkuasetuksien perusteella lompakko hakee asetuksia WEB-käyttöliittymältä ottamalla yhteyttä data.php sivuun WEB-palvelimelle. Ja varmistaa olevansa oikea lompakko MD5-tarkistussummalla.

Bitcointilin saldon voi tarkistaa saldonapin painamisella. Ja siirtonapilla tapahtuu Bitcoinsiirto rautalompakossa Blockchainin lompakko API-rajapinnan avulla WEB-palvelimella.

Lisäksi lompakko ottaa asetuksetnapilla WEB-palvelimelta ohjauksia vastaan. Kuten uudet asetukset asetukset.php sivulta sekä viestejä LCD-näytölle. Kaikesta tästä pieni kaavio jos se selvittää asiaa paremmin:

Bitcoinien siirron voi toteuttaa myös tekstiviestillä, joka lähetetään lompakolle. Ja jonka WEB-palvelimella oleva data.php sivu tulkitsee jälleen kerran ja siirtää Bitcoinit sen mukaan. Ja jotta tekstiviesti siirto toimii, niin tekstiviestien lukeminen ja lähettäminen internettiin pitää kytkeä päälle asetukset.php sivulla. Ja kun se on päällä niin tekstiviestillä siirto tapahtuu seuravaan kaavion mukaan:

Eli tekstiviestejä skannataan tietty määrä läpi, jonka jälkeen päivitetään Bitcointilin saldo EEPROM-muistista löytyvien datojen mukaan. Ja jos tekstiviestien skannauksen aikana löytyy tullut tekstiviesti lähetetään se WEB-palvelimelle. Tekstiviestien skannauksen voi päättää asetukset nappia painamalla, jolloin hypätään ”Haetaan ohjauslausetta WEB-palvelimelta.” tilaan.

Bitcoinlompakon rautapuoli

Bitcoinlompakon rautaosuus on otettu aikaisemmista I2C-väylän projekteista lisäten siihen rautaan vain 2 nappia lisää Bitcoin siirtelyjä ajatellen. Tuosta raudasta löytyy kytkentäkaavio toteutus linkin takaa. Ja tämä suunnitelma onkin hyvä päättää kuvaan raudasta millä homma toteutetaan.

© Copyright <> jyrki.k(at)innopultti.fi <> Päivitetty: 12.12.2022