ing. Petr Slabý (c)2000
Kompletní diplomová práce (PDF formát) je zde (diplomka.pdf).
Jednotlivé programy se zdrojovými kódy pro DELPHI 4.0:
Peněženka
Banka
Obchodník
CGI
a potřebné komponenty THashManager,
TCipherManager a TRSA
Elektronický platební systém by měl splňovat tyto funkce:
Bezpečnost
Bezpečná komunikace mezi subjekty
Ověření protistrany
Prokazatelnost původu zpráv
Integrita dat
Přístupnost
24 hodin denně
Z jakéhokoliv počítače připojeného k Internetu
Pro jakéhokoliv zákazníka, obchodníka či banku
Žádné speciální hardwarové nároky (speciální čtecí a
ověřovací zařízení)
Použití systému není vázáno na platební kartu, ale na
číslo účtu v bance
Použitelnost
Nákup a prodej
Převody peněz z účtu na účet
Platební systém musí obsahovat kompletní sadu protokolů pro
jednotlivé peněžní transakce. Součástí systému by mělo
být i ošetření některých dalších jevů, ke kterým může
docházet. Těmito jevy míním např. různé snahy o oklamání
systému, apod.. Při konstrukci jednotlivých protokolů jsou
vznášeny různé požadavky, které je možno obecně rozdělit
na obchodní (marketingové) a technické. Přičemž
samozřejmě obojí spolu úzce souvisí. Jestliže chci
provozovat nějaký platební systém, tak mě kromě samotných
protokolů musí zajímat mnohem větší okruh otázek. Tyto
otázky se týkají např. přenosového média, které chci
používat ke komunikaci, hardwarového vybavení (počítače,
modemy a další) a jejich předpokládaného zatížení, ale
třeba také ceny za napojení jednoho zákazníka a obchodníka,
množství potenciálních uživatelů, vlastnosti použitelné
pro propagaci, atd.
Jedním ze základních požadavků je to, aby byl systém
akceptovatelný pro trh. Trhem zde myslím obchodníky a
uživatele (zákazníky).
Při vzniku protokolu SET byly vzneseny tyto požadavky:
dosáhnutí celkové přijatelnosti snadnou realizovatelností a
co nejmenším vlivem na obchodníky a koncové uživatele.
umožnit modulovou implementaci platebního protokolu do
existujících zákaznických aplikací
minimalizovat změny ve vztazích zákazníci - poskytovatelé a
nabyvatelé - obchodník
požadovat co nejmenší vliv na existující aplikace a
infrastrukturu obchodníků, banky a platebního systému
poskytovat efektivní protokol z pohledu finanční instituce
Původ většiny požadavků je zřejmý a vychází z
předpokladu (do značné míry oprávněného), že pokud chcete
po lidech, aby se naučili používat něco nového a zároveň
do toho měli sami investovat, tak se velkého vděku
nedočkáte. Druhým z cílů uvedených požadavků je jediné -
přesvědčit zákazníky (uživatele a obchodníky), že novou
věc prostě potřebují a hlavně, že na tom vydělají.
Jestliže se toto nepodaří, tak ani sebelépe technicky
navržený platební systém v konkurenci neuspěje. Máme dva
základní požadavky, které jdou do jisté míry proti sobě.
Je otázkou, na který z nich dáme větší důraz.
Technické požadavky směřují k zajištění funkčnosti a
bezpečnosti platebního systému. Hlavní požadavky na
platební protokoly by mohly znít takto:
poskytovat důvěrnost platebních informací a zajistit
důvěrnost informací z objednávek
zajistit integritu všech přenášených dat
poskytovat autentizaci uživatele (držitele karty), jak ve
vztahu k bance (vlastnictví účtu), tak ve vztahu k
obchodníkovi (peníze jsou v pořádku)
umožnit autentizaci obchodníka ve vztahu k uživateli
(prodávám zboží, které nabízím), aby mohl přijímat
elektronické peníze
dostatečné použití bezpečnostních postupů a technik při
návrhu systému k ochraně všech legitimních účastníků
platebního protokolu
zajistit, aby byl protokol nezávislý na bezpečnosti
přenosových mechanismů
při pokusu o obelstění systému je možné jednoznačně
určit viníka a na základě této identifikace ho
příslušným způsobem postihnout
Tyto požadavky jsou zajištěny implementací čtyř
základních principů. Všechny tyto principy jsou v navrženém
systému použity. Jmenovitě jsou to:
důvěrnost - označuje vlastnost zprávy, kdy její obsah
je znám pouze odesílateli a zjistit ho může pouze příjemce.
Jakákoliv jiná strana, která zprávu získá není schopna
obsah v rozumné době zjistit
integrita - zajištění integrity označuje stav, kdy
obsah zprávy je při příjmu shodný s obsahem odeslaným.
Porušení integrity musí být rozpoznatelné.
autentizace - je proces, kdy jedna strana dokazuje svou
totožnost druhé straně. To platí jak o osobě, tak
například o instituci, nebo počítači.
neodmítnutelnost odpovědnosti - úzce souvisí s
autentizací, zajišťuje, že se nemohu zbavit odpovědnosti za
akce, jichž jsem původcem.
Pro usnadnění a podporu elektronického obchodu je nutné
ujistit uživatele, že citlivé informace, které používají
při činnosti v rámci platebního systému jsou bezpečně
uloženy a přístupné pouze tomu, komu jsou určeny. Proto
musí být informace o platbách, objednávaném zboží, čísla
účtů uživatelů zajištěny nejen při přenosu, ale i při
archivaci. V opačném případě by samozřejmě mohlo dojít ke
zneužití těchto citlivých informací neautorizovanou stranou.
V současné době, kdy drtivá většina informací je
přenášena přes otevřené sítě bez jakéhokoliv
zabezpečení, je nutné používání kryptografie. Příkladem
může být např. placení zadáním čísla kreditní karty. Je
jen otázkou času, kdy se tyto důvěrné informace pokusí
někdo zneužít. S pomocí počítačů je možno nadělat
mnohem větší škody v mnohem kratší době. Jestliže se tato
činnost zautomatizuje vytvořením speciálních programů, tak
výsledná škoda bude nesrovnatelná s klasickými podvody bez
použití výpočetní techniky.
Specifikace musí zajistit zachování obsahu zpráv při
přenosu mezi jednotlivými stranami protokolu, a případnou
detekci neautorizovaných změn. Je jasné, že ve chvíli kdy
tato vlastnost nebude zajištěna, je otevřena brána pro
různá individua, která poté mohou s malou námahou páchat
vysoké škody. Jestliže se změní některá z položek
objednávky, osobní data, nebo platební instrukce (a nejen
úmyslně, ale i chybou při přenosu), tak to může vést k
chybám, nebo (a to je mnohem pravděpodobnější) k podvodům.
Proto je nutné použít mechanismy, které zajistí, že obsah
přenesené zprávy je přesný a že nedošlo k jeho změně.
Jestliže bude zjištěn opak, musí být zpráva odmítnuta a
případně vyžádat opakování zaslání zprávy.
Třetí princip v pořadí. Při použití algoritmu RSA má
každý účastník systému dva klíče: veřejný a soukromý.
Soukromý používá on sám a nikomu ho nesděluje. Veřejný
klíč je naopak rozšiřován mezi všemi, kteří chtějí s
tímto účastníkem komunikovat.V této fázi je nutno zajistit,
že veřejný klíč účastníka XY skutečně patří
účastníku XY a ne někomu, kdo se za něj vydává. Pro
splnění tohoto požadavku se používají jiné mechanismy,
jež budou popsány dále. Teprve takto zajištěný klíč už
může sloužit k autorizaci tohoto účastníka kdykoliv dále.
Princip neodmítnutelnosti odpovědnosti slouží k
jednoznačnému určení totožnosti původce ať už nějaké
zprávy, nebo činnosti. Zásadní odlišnost od autentizace je v
tom, že uřčení totožnosti původce se v tomto případě
provádí až po uskutečnění sledované činnosti. Nemohu tedy
zabránit provedení nežádoucích akcí, mohu pouze následně
určit jejich původce. V platebním protokolu je tento princip
nutný k tomu, aby bylo možné zjistit a následně postihovat
účastníky systému, kteří se nechovají podle pravidel.
Autentizace spočívá v ověření totožnosti protistrany.
Zákazník zadá svoje iniciály (jméno, příjmení, rodné
číslo, atd..) a heslo. Z bezpečnostních důvodů není dobré
posílat tyto privátní údaje přes veřejnou síť jakou
Internet je. A proto se z těchto údajů vypočte hashovacím
algoritmem kód, který je posílán přes Internet k
protistraně. Hashovací algoritmus je samozřejmě jednocestná
funkce, takže z výsledného kódu nelze zpětně určit
vstupní data.
Pro zabezpečení přenášených dat je použita metoda
šifrování a digitálního podpisu. Je použita kombinace
symetrického a asymetrického šifrování.
Jako vstupní hashovací algoritmus je použit Secure Hash
Algorithm (SHA). Výstupem tohoto algoritmu je 160-ti bitový
digest.
Pro symetrické kódování je použit algoritmus TRIPLE DES
(3DES) s délkou symetrického klíče 192 bitů. Tento klíč je
vždy náhodně generovaný. Při aktivaci spojení mezi dvěma
subjekty se vygeneruje pokaždé jiný náhodný klíč.
Pro asymetrické kódování je použita metoda RSA, tj.
metoda privátního a veřejného klíče. Délka klíče je 512
bitů. Metoda RSA spočívá v tom, že co se zakóduje pomocí
veřejného klíče, to se musí dekódovat pomocí privátního
a veřejného klíče.
Pozn.: Možné modifikování vzhledem k bezpečnosti:
Délka klíče může být až 2048 bitů. Na počátku spojení,
mezi dvěma subjekty, mohou být privátní a veřejné klíče
nově vygenerovány a tím by se značně zvýšila bezpečnost
platebního systému.
Digitální podpis je výstupní kód z hashovacího
algoritmu, který je zakódován veřejným klíčem protější
strany. Zde je, jako hashovací algoritmus, použit standardní
Message Digest 5 (MD5).
Platební systém jsem naprogramoval v DELPHI 4.0 pro Windows
95/98. Skládá se ze čtyř samostatných programů -
Peněženka, Obchodník, Banka a CGI. Každý z těchto programů
je samostatně spustitelný na jakémkoli počítači s
operačním systémem Windows 95 nebo vyšší a samozřejmě
připojených na Internet. Pro symetrické kódování a
hashovací algoritmy jsem použil komponenty TCipherManager a
THashManager. Pro asymetrické kódování jsem použil
komponentu TRSA.
Program je navržen tak, aby byl přístupný pro jakéhokoliv
uživatele, tzn. může být nainstalován na veřejně
přístupných počítačích. Na počítač, kde je tato
peněženka nainstalována, se neukládají žádné privátní
údaje o uživatelích, takže nemůže dojít k jejich
zneužití. Funkci peněženky by mohl obstarávat i web server
banky, ale z hlediska větší bezpečnosti a rychlosti
zpracování je lepší mít program na lokálním disku. Program
má dvě funkce. První je, že peněženka je použita k
vyvolání platební transakce (program je spuštěn automaticky
WWW prohlížečem) a druhá, že peněženka si vyžádá od
banky zákazníka výpis všech provedených plateb (program si
spustí uživatel sám z příkazové řádky).
Je to program, který vlastně spolu s
programem CGI zajišťuje zázemí obchodníka.
Tento program je složen ze tří částí -
Banka zákazníka, Banka obchodníka a Platební brána.
Pro správnou funkci tohoto systému musí být spuštěny
všechny tři části. Každá z těchto částí se dá vypnout,
ale je nutné tento program spustit na jiném počítači. Poté
je ale zapotřebí správně nakonfigurovat URL adresy všech
subjektů. Banka zákazníka reprezentuje banku, kde má
každý zákazník svůj účet. V bance se zadávají noví
zákazníci. Dále se mohou editovat nebo rušit. Banka ověřuje
solventnost zákazníků a zaznamenává všechny jejich
platební transakce.
Banka obchodníka reprezentuje banku, kde má každý
obchodník svůj účet. V bance se zadávají nebo mažou noví
obchodníci. Banka zaznamenává všechny platební transakce
obchodníků.
Platební brána je program, který dává příkazy bance
zákazníka a bance obchodníka k převodu peněz z účtu
zákazníka na účet obchodníka.
Tento program generuje WWW stránky Virtuálního Obchodního
Domu a posílá MIME zprávu s objednaným zbožím
internetovému prohlížeči, který po přijetí této zprávy
zaktivuje peněženku.
MIME zpráva zaslaná ze serveru obchodníka WWW prohlížeči
zákazníka, který po jejím přijetí aktivuje elektronickou
peněženku a ta ji zpracuje:
Mime version: 1.0
Content-Type: text/plain
Content-Length: 0
Content-Transfer-Encoding: binary
SET-Initiation-Type: Payment
SET-Version: 0.0
SET-SET-URL: http://200.0.0.2/cgi-bin/DiplomkaCGI.exe/PlatitSETem
SET-Success-URL: http://200.0.0.2/cgi-bin/DiplomkaCGI.exe/Uspech
SET-Failure-URL: http://200.0.0.2/cgi-bin/DiplomkaCGI.exe/Chyba
Gun Coolant Mk IV;10;480000
Gun Coolant Mk II;5;60000
BSE Mk II;10;180000
Po klepnutí na tlačítko "Zaplatit" se zaktivuje
Peněženka. Nejprve je nutné zadat jméno, příjmení, rodné
číslo a heslo. Do políčka URL banky se musí zadat URL adresa
banky zákazníka.
Po klepnutí na tlačítko OK se spustí vlastní platební
transakce. Z uvedených údajů se vypočte hashovací kód,
který je později použit pro identifikaci zákazníka. Vymění
si s bankou zákazníka veřejné klíče a pošle bance
symetrický klíč. Poté u banky zákazníka zjistí zůstatek
na účtu daného zákazníka a URL platební brány. Dále
zjistí z objednaného zboží celkovou cenu a porovná jí se
zůstatkem na účtu. Je-li dostatečný zůstatek na účtu, tak
se pokračuje dále, jinak se transakce přeruší. Spojí se s
platební bránou a vymění si veřejné klíče a pošle
platební bráně symetrický klíč. Dále se spojí s
obchodníkem a také si vymění veřejné klíče a pošle
obchodníkovi symetrický klíč. Poté vygeneruje dvojitou
zprávu. Jedna část je zakódována veřejným klíčem
platební brány a druhá část veřejným klíčem obchodníka.
V první části je hashovací kód zákazníka a v druhé
části je objednané zboží od obchodníka.
Obchodník dvojitou zprávu přijme dekóduje svojí část,
určí celkovou cenu objednávky a objednané zboží. Vymění
si s bankou obchodníka veřejné klíče a pošle bance
symetrický klíč. Od banky obchodníka zjistí URL platební
brány. Vymění si s platební bránou veřejné klíče a
pošle jí symetrický klíč. Vloží do dvojité zprávy svůj
hashovací kód zakódovaný veřejným klíčem platební
brány. Pošle platební bráně dvojitou zprávu a poté ještě
celkovou cenu objednaného zboží. Platební brána přijme
dvojitou zprávu a dekóduje obě části zprávy a tak dostane
identifikační kódy zákazníka a obchodníka. S bankou
zákazníka si vymění veřejné klíče a pošle bance
zákazníka symetrický klíč. Dále pošle bance
identifikační kód zákazníka a obratem dostane číslo účtu
zákazníka. Poté pošle bance zákazníka částku k
převedení z účtu zákazníka na účet obchodníka. S bankou
obchodníka si vymění veřejné klíče a pošle bance
obchodníka symetrický klíč. Poté pošle bance obchodníka
identifikační kód obchodníka a obratem dostane číslo účtu
obchodníka. Dále pošle bance obchodníka částku, kterou má
připsat na konto obchodníka. Bance zákazníka pošle číslo
účtu obchodníka.Jestliže nedošlo k žádné chybě během
přenosů zpráv a jejich zpracování, tak platební brána
všem účastníkům transakce rozešle zprávu o úspěšném
ukončení transakce.
Jestliže ale během zpracování došlo k nějaké chybě, tak
subjekt u kterého došlo k chybě, rozešle zprávu s chybovým
hlášením všem do té doby zúčastněným subjektům a
transakce se ukončí.
Na následujícím obrázku je zobrazen tok dat při platbě v
platebním systému. Šipka znázorňuje směr toku dat. Na
začátku každé šipky je číslo, které je identifikačním
číslem zprávy. Nad šipkou je vždy informace o datech. V
následující tabulce je seznam všech identifikačních čísel
zpráv. ID označuje číslo zprávy, odpověď A resp. N
značí, že zpráva vyžaduje resp. nevyžaduje odpověď.
Pozn.:
* - Dvojitá zpráva obsahuje v první části hash kód
zákazníka a v druhé soupis objednávaného zboží.
** - Dvojitá zpráva obsahuje v první části hash kód
zákazníka a v druhé části hash kód obchodníka.
*** - Při výpisu provedených plateb se ve zprávě žádosti
posílá hash kód zákazníka a obratem se dostává zpráva ve
které je seznam provedených plateb.
Na následujícím obrázku je zobrazen tok dat při výpisu
plateb.
Každá zpráva má tuto strukturu:
ID zprávy - hexadecimální číslo (2 bajty)
Délka zprávy - hexadecimální číslo (4 bajty)
Zpráva - řetězec hexadecimálních čísel (proměnná
délka)
Při odeslání se veřejný klíč převede na řetězec
dvojic znaků, přičemž každá dvojice znaků odpovídá
hexadecimálnímu číslu jednoho ASCII znaku veřejného
klíče. Tzn., že se posílá zpráva s dvojnásobnou délkou
než je délka samotného veřejného klíče. Po tomto převodu
se přidá hlavička zprávy, tj. ID zprávy a délka zprávy. Po
přijmutí zprávy s takto převedeným veřejným klíčem se
musí odpovídajícím způsobem veřejný klíč rekonstruovat.
Před odesláním symetrického klíče se symetrický klíč
zakóduje pomocí veřejného klíče příjemce a převede se na
hexadecimální formát. Poté se přidá hlavička zprávy a
zpráva se odešle. Po přijmutí zprávy se zakódovaným
symetrickým klíčem se zpráva převede z hexadecimálního
formátu na ASCII formát a dekóduje se pomocí privátního a
veřejného klíče příjemce.
Nejdříve se vypočte message digest (MD5) ze zprávy a poté
se tento digest zakóduje veřejným klíčem příjemce. Tímto
je vytvořen digitální podpis. Vytvoří se obálka, která
obsahuje délku zprávy (4 bajty), samotnou zprávu, délku
digitálního podpisu (4 bajty) a digitální podpis. Tato
obálka se poté zakóduje symetrickým klíčem (metoda Triple
DES) a převede se na hexadecimální formát. Nakonec se
připojí hlavička a zpráva se odešle. Po přijmutí
zakódované zprávy se obálka převede z hexadecimálního
formátu na ASCII a dekóduje se symetrickým klíčem. Z obálky
se vyjme zpráva a digitální podpis, který se následně
převede na ASCII formát. Digitální podpis se dekóduje
pomocí privátního a veřejného klíče příjemce. Ze zprávy
se vypočte nový message digest a porovná se s dekódovaným
message digestem ze zprávy. Jestliže si tyto hodnoty
odpovídají, pak je vše v pořádku. Jestliže si ale
neodpovídají, pak je zpráva nahrazena zprávou s chybovým
hlášením.
Vytvoření dvojité zprávy je analogické jako vytvoření
jednoduché zprávy, ale s tím rozdílem, že odesílaná
zpráva je složená ze dvou jednoduchých zpráv. Dekódování
dvojité zprávy je trochu složitější, protože se
nedekódují obě zprávy najednou, ale pouze jedna a druhá se
pouze oddělí od první. Dekódování první zprávy je
analogické jako dekódování jednoduché zprávy. Druhá
zpráva se musí dekódovat zvlášť, protože se musí zajistit
to, aby některý příjemce mohl dekódovat pouze jednu zprávu
a některý mohl dekódovat obě zprávy. Na dekódování druhé
zprávy je použita funkce k dekódování jednoduché zprávy.