TTKK / Tietoliikenne / J.Koskinen : Tietoturvallisuuden perusteet
6. viikko, ke 6.10.1999
Ohjelmien oikeellisuudesta
Aiemmin oli puhe viruksista ja niiden torjunnasta. Siinä oli kyse ohjelmakoodin
eheydestä, joka todettiin lähinnä varmistamalla, ettei ohjelmaa ollut peukaloitu
jälkikäteen. Mistä sitten tietää, että ohjelma toimii alunperinkään oikein?
Ensinnäkin kannattaa varmasti noudattaa hyviksi koettuja ohjelmoinnin
periaatteita. Kertaa/LUE yksi kokoelma sellaisia.
Toiseksi, ohjelma kannattaa testata huolellisesti. Testausta pitää tehdä
ohjelmistotyön eri vaiheissa ja usealla tasolla. Viimeksi mainittu
tietojärjestelmän "hyökkäystestaus" on melko viimeisen vaiheen, jo valmiin
asennuksen, testausta.
Yksi uudenlainen tietoturvaan liittyvä vikatestausmenettely on esitelty
artikkelissa A.K.Ghosh, J.M. Voas: Inoculating Software for Survivalbility,
Communications of the ACM, Vol. 42, No. 7 July,1999 , 38-44.
Inoculating tarkoittaa taudin istuttamista (kuten rokotuksessa) ja kyseessä on
tässä tapauksessa turvallisuuskriittisten järjestelmien testaus siten, että niihin
syötetään vikoja ja katsotaan pysyykö järjestelmä pystyssä ja pitääkö se
erityisesti varannot turvassa ("fault injection analysis"). Viat saadaan aikaan
peukaloimalla kaikkia ohjelmassa esiintyvien muuttujien arvoja, yksi kerrallaan.
Vikojen on tarkoitus vastata kaikkea sellaista, mitä hyökkääjä tai epäkuntoinen
käyttöjärjestelmä voisi aiheuttaa. Mukana on myös puskurin ylivuototestaus siten,
että ajonaikaiseen pinokehykseen paluuosoitteen tilalle kirjoitetaan
osoite puskuriin, jossa on ajettavaa koodia, jonka on siis tarkoitus korvata
aliohjelmasta palaamisen jälkeinen normaalin suoritus.
Vastaavanlaiseen mutta pinnallisempaan testaukseen viitataan GNU-projektin
dokumentissa
(mainoksessa): Unix-järjestelmien varusohjelmille annettiin satunnaisia syötteitä
ja katsottiin kuinka usein ohjelmat kaatuivat tai jäivät ikisilmukkaan.
Kaupallisilla Unix-järjestelmillä tämä keskimäärä oli 15:n ja 43:n prosentin
välillä, GNU:lla se oli 7%.
Kolmanneksi, joskin jo osana itse ohjelmointivaihetta, ohjelmien oikeellisuutta
voidaan yrittää verifioida formaalein menetelmin, jotka perustuvat yleensä
(temporaali)logiikaan ja mallin tarkistukseen (model checking). Vastaavat
menetelmät ovat jo osoittaneet voimansa laitteistojen (ja laitelmistojen)
suunnittelussa, mutta eivät ole vielä lyöneet itseään läpi ohjelmistojen
tapauksessa.
Oikeaksi todistaminen on teoriassa mahdotonta, mutta riittävän rajatuissa
yhteyksissä voidaan tuloksia saada. Ohjelman tietoturvallisuus on yksi tällainen
ala, vaikka toisaalta hyökkäysten periaatteellinen arvaamattomuus tekee tämänkin
hyvin haastavaksi. Tietoturvaprotokollien verifioinnissa käytettyihin
periaatteisiin ja menetelmiin voi tutustua protokollakurssin materiaalin avulla:
yleistä ja CSP sekä
BAN-logiikka.
Yksi uudenlainen mahdollisuus vakuuttaa käyttäjä ohjelman turvallisuudesta on
varustaa ohjelmakoodi todistuksella sen omasta oikeellisuudesta.
Menetelmää voi soveltaa paitsi liikkuvaan koodiin (esim. "appletteihin")
jollaisia käyttäjä lataa verkon ylitse eri lähteistä, myös usein päivitettäviin
(paikattaviin) ohjelmistoihin.
Koodin tuottaja toteuttaa koodinsa jollain (kone)kielellä, jolla on formaali
semantiikka, ja käyttää jotain automaattista teoreemantodistajaa muodostamaan ja
esittämään jollain formaalilla kielellä todistuksen siitä, että koodi noudattaa
jotain tiettyä turvapolitiikkaa - erityisesti sitä, jonka käyttäjä eli koodin
vastaanottaja on ilmaissut jollain formaalilla kielellä. Käyttäjä tarkastaa koodin
mukana saamansa todistuksen jollain algoritmilla, joka toimii paljon nopeammin
kuin varsinainen todistaminen. Kun hän on vakuuttunut siitä, että todistus on
oikea ja koskee ao. koodia ja ao. politiikkaa, hän asentaa ja toteuttaa koodin, ja
voi olla varma siitä, että politiikka toteutuu myös käytännössä.
Katso tarkempia tietoja artikkelista Proof-Carrying
Code. Todettakoon, että tässä on kysymys paljon enemmästä kuin koodin
alkuperän ja eheyden varmistamisesta. Näitä tavoitteita voidaan toteuttaa
tavalliseen tapaan tiivisteilla ja allekirjoituksilla, ja sellaista palvelua
tarjoaa esim. VeriSign, ks. vaikkapa Object Signing
FAQ.
Yksi mahdollisuus varmistua siitä, ettei koodi pääse tekemään luvattomia on
ajaa sitä sellaisessa ympäristössä joka avustaa käyttöjärjestelmää
pääsynvalvonnassa: Javan ajonaikainen ympäristö on tällainen hiekkalaatikko, jonka
rajoja voidaan myös muutella: Niiden sisällä toimivalta koodilta voidaan estää
lukeminen tai kirjoittaminen paikalliselle levylle, yhteydenotto muuhun kohteeseen
verkossa kuin siihen josta koodi ladattiin, uuden prosessin käynnistäminen, uuden
ohjelmakirjaston lataaminen ja aliohjelman suora kutsuminen.
Yleisempi mahdollisuus on kääriä ohjelma toisen ohjelman ("wrapperin")
sisälle, jolloin kääre toimii viitemonitorina ja huolehtii erityisesti
pääsynvalvonnasta.
Tunnettu esimerkki on tcpwrapper, joka käärii Internet-demonin 'inetd'. Tämän
ohjelman tehtävänä on kuunnella palvelimen tietoliikenneportteja ja niihin
tulleiden palvelupyyntöjen perusteella käynnistää asianmukaisia palvelinohjelmia,
kuten http:n tai ftp:n. Tcpwrapper suorittaa tarkastuksia, joiden mukaan se
ratkaisee, mihin pyyntöihin se antaa inetd:n vastata.
Edellä mainittujen palvelupyyntöjen lähettäjien eli asiakasohjelmien (esim.
selaimen) tapauksessa voidaan vastaavankaltaista "esiliinatoimintaa" saada aikaan
ns. proxyillä eli sananmukaisesti "valtuutetuilla" tai "edustajilla". Nämä ovat
ohjelmia, jotka sijaitsevat mahdollisesti hieman etäämpänä käyttäjästä, mutta
asettuvat käyttäjän ja avoimen tietoverkon väliin suodattaen tietoa suuntaan ja
toiseen ja näyttäen ulospäin mahdollisesti vain itsensä eikä käyttäjää.
Tietynlaisessa asemassa olevia edustajia sanotaan palomuureiksi ja nämä tulevat
esille jäljempänä.
Verkot ja hajautetut järjestelmät
Tietoverkko on sellainen tietojenkäsittelyn ympäristö, jossa on useita itsenäisiä
tietokoneita, jotka pystyvät kommunikoimaan keskenään. Kullakin koneella voi olla
useita käyttäjiä, mutta muuten koneiden koolla eikä niiden välisellä etäisyydellä
ole merkitystä verkon toimintaperiaatteiden kannalta.
Verkon käsitteitä. Näistä olisi hyvä olla jonkinlainen käsitys:
Isäntäkone (host), palvelin (server), asiakas (client), lähiverkko (LAN),
topologia, verkkojen väliset yhdyskäytävät, verkkojen yhteysverkot (internetit),
osoitteet, nimet, reititin, protokollat ja niiden kerroksellinen rakenne (OSI-malli ja
TCP/IP-malli).
Resursseja, joita riskianalyysissa pitää ottaa huomioon, läheltä kauas
lueteltuina: paikalliset solmut ja niiden väliset linkit, lähiverkko, sen
laitteet, prosessit ja talletetut tiedot, mm. kontrolli-informaatio; yhdyskäytävä
ulkoiseen verkkoon, ja linkit yhdyskäytävästä ulospäin, ulkoisen verkon
reitittimet ja resurssit kuten tietokannat.
Turvattomuutta aiheuttavia tekijöitä verkoissa:
- Resurssien jakaminen (joka on yksi verkon etuja) aiheuttaa sen, että
(1) mahdollisia käyttäjiä (ja samalla väärinkäyttäjiä) on aiempaa enemmän ja (2)
kullakin on pääsy aiempaa useampaan koneeseen (mikä ei ehkä olekaan aina oikein
aiempien käyttöoikeuksien perusteella).
- Monimutkaisuus: jo yhden koneen käyttöjärjestelmä on niin laaja ja
monitahoinen, että sitä on vaikea saada turvalliseksi, ainakaan niin että
asiaan voitaisiin aidosti luottaa. Useamman koneen hieman ehkä erilaiset
järjestelmät muodostavat kokonaisuuden jonka mutkikkuus on lähempänä yksityisten
järjestelmien tuloa kuin summaa.
- Epämääräiset rajat. Verkon laajennettavuus on yksi verkon etuja, mutta
varsinkin verkkojen yhdistely aiheuttaa sen, ettei käyttäjä välttämättä tiedä,
mitä muita (ja millaisia!) tahoja kulloinkin voi olla siihen yhteydessä.
- Useita hyökkäyskohtia. Samalla kun tietojenkäsittelyn vaiva (prosessit ja
tiedostot) jakautuu useampaan paikkaan (mikä on hyvä asia), lisääntyvät ne paikat
joissa hyökkäyksiä voi tapahtua, ja käyttäjä joutuu luottamaan usean koneen
pääsynvalvontamekanismiin ja muihin turvajärjestelyihin.
- Anonyymius: hyökkäys voi tapahtua hyvin kaukaa ja usean väliaseman kautta,
jolloin tekijää on vaikea saada kiinni tai edes tunnistaa. Koneiden välinen
autentikointi ei myöskään ole vastaavalla tavalla luotettavaa kuin
ihmisten välinen. Se voi kyllä olla luotettavampaakin, mutta tätä varten tarvitaan
huolella laadittuja protokollia.
- Arvaamattomat polut: Tietojenkäsittelyn saatavuutta parantaa vaihtoehtoisten
palvelimien tai liikennöintireittien käyttö, mutta samalla voidaan päätyä
käyttämään huonommin turvattuja solmuja tai linkkejä kuin haluttaisiin.
Politiikkaa ja turvamekanismeja ei voi täysin pitää erossa toisistaan, koska
jälkimmäiset riippuvat verkkoteknologiasta, joka toisaalta määrää paljolti sen
missä kohdin uhkia voi esiintyä.
Viestintää koskevat yleiset uhkat ovat viestin paljastuminen, viestin
muuntuminen matkalla, keksityn viesti ilmestyminen, viestin estyminen. Lisäksi
etäresurssin luvaton käyttö verkon yli.
Uhkakuvia
Mitä kaikkea ikävää verkkoympäristössä voikaan tapahtua ja miten:
- Salakuuntelu, "langalla olo":
- kaapeli, lähiverkossa kaikki kuulevat kaiken: nuuskinta "pakettisnifferillä";
sähkömagneettinen kenttä johtimen (tms.) ympärillä antaa mahdollisuuden
induktion käyttöön. Valokaapelissa tätä ongelmaa ei ole, eikä tällaiseen kaapeliin
voi myöskään vastaavalla tavalla tunkeutua. Lähiverkkojen ulkopuolella lähetykset
ovat multipleksoituja ja siksi hankalampia selvitettäviä.
- radiotie: kohdistus ei tarkkaa - satelliittilähetyksessä hyvin laaja hajonta,
mutta ongelma ei multipleksoinnin ansiosta ole kovin suuri.
- Henkilöllisyyden harhauttaminen, toisena esiintyminen (impersonointi):
- salasalan selvittäminen arvaamalla tai salakuuntelulla
- autentikoinnin välttäminen (jonkin virheen esim. puskurin ylivuodon
seurauksena)
- sisäänpääsy luotettuna "naapurista" (.rhosts tai .rlogin) tai vieraana avoimesta
ovesta (guest) tai tunnetulla/vakioisella keinolla (asennussalasana).
- Edellisten lisäksi luottamuksellisuus voi särkyä seuraavasti:
- väärä osoite viestillä (teknisen vian takia tai väärin kirjoitettuna)
- paljaana "viuhahtaminen" väliasemilla (kytkimissä, reitittimissä, silloissa,
välillä olevissa palvelimissa) ja työmuistialueilla (viestiä käsittelevien
ohjelmien)
- liikenneanalyysi: viestin olemassaolo (tai viestintätiheys) jo
paljastaa jotain (vrt. tiedon olemassaolo tietokantapäättelyssä), myös
reititysrakenne voi paljastua tai jonkin lähiverkon nimistö.
- Viestin eheyden särkeminen:
viestin tai sen osan muuttaminen, viestin korvaaminen toisella, vanhan viestin
käyttö (replay), ilmaistun lähettäjän muuttaminen, uudelleen suuntaaminen, viestin
hävittäminen; (tahaton) kohina, jota virheenkorjaavilla koodeilla hallitaan varsin
hyvin.
- Koodin eheys:
Palvelut erityisesti seitissä sisältävät tilanteita, joissa verkon yli ladataan
tai latautuu koodia, jonka olemusta käyttäjä ei yleensä tunne, eikä aina edes
tiedä että näin tapahtuu tai ei ainakaan pääse vaikuttamaan latautumiseen. Tästä
oli puhetta jo edellä.
- Palvelun esto:
Verkoissa on yleensä redundanssia reitityksen ja palveluidenkin osalta,
mutta kriittisten polkujen häiriytyminen/häirintä kaataa verkon. Tämä voi tapahtua
"tulvan" takia: joku lähettää erityisesti jollekulle ehkä jopa autenttisen
näköisiä viestejä tai sitten yleisesti "puurouttaa" verkkoa viesteillä, jotka vielä
monistuvat kuittauksina tai virheilmoituksina. Toisenlainen estotilanne syntyy
reitityksen sotkeutuessa virheellisten tai hyökkääjän modifioimien
"tienviittojen" takia.
Turvamekanismeja
Erityisistä mekanismeista on jo ollut esimerkkeinä PGP ja SSL ja ensi
kerralla tulee vielä SSH ja IPSec. Nyt asiaa katsotaan vain yleisellä tasolla:
- Liikenteen salaus: päästä päähän, linkeittäin vai jokin välimuoto. Tällä
ratkaistaan
- kuinka suuri osa liikkeellä olevasta viestistä on salattuna: minkä
tasoisen osoite- ja otsikkokentän on oltava selväkielisenä;
- minkä osapuolten pitää vaihtaa tieto symmetrisestä avaimesta;
- missä vaiheissa pitää suorittaa salauksen purkua ja edelleen salausta,
kuinka suuri osa viestistä on tällöin paljaana ja minkä tahon nähtävillä
se silloin on.
- Käyttäjien autentikointi: periaatteet ovat olleet esillä jo aiemmin.
Yleisissä verkoissa korostuvat sellaiset menetelmät, jotka perustuvat julkisiin
avaimiin ja erityisesti niiden infrastruktuuriin. Rajatummissa yhteyksissä voidaan
tulla toimeen ilman sertifikaattejakin ja jopa symmetrisillä menetelmillä.
Esimerkiksi Kerberos on tunnettu symmetriseen salaukseen perustuva
autentikointijärjestelmä, joka käyttää kahta luotettua kolmatta osapuolta:
ensimmäinen autentikoi käyttäjän ja toinen sallii sitten tämän pääsyn eri
palveluihin (lippujen, 'tickets' avulla).
- Järjestelmien autentikointi: verkoissa pitää käyttäjien lisäksi pystyä
autentikoimaan laitteita tai ainakin prosesseja, joita niissä ajetaan (ja joiden
kanssa esimerkiksi tehdään kauppaa). Kun kommunikoivien laitteiden välillä on
useita muita solmuja ja linkkejä, jotka eivät ole minkään yhden tahon hallinassa,
laitteiden aitouden toteamiseen tarvitaan aivan vastaavia protokollia kuin
käyttäjienkin autentikointiin.
- pääsynvalvonta: Aiemmin eri yhteyksissä esille tulleiden menetelmien lisäksi
verkossa voidaan pääsyoikeuksia eriyttää sen mukaan, mistä fyysisestä paikasta
yhteys otetaan. Esimerkiksi modeemeitse otettava yhteys voidaan automaattisella
takaisinsoitolla rajoittaa tiettyihin ennalta sovittuihin numeroihin. Sen lisäksi
voidaan rajoittaa niitä resursseja, joihin sallitaan pääsy tällaisten vähemmän
luotettavien yhteyksien kautta.
- liikenteen hallinta: liikenneanalyysin torjumiseksi ja tavanomaiseen
viestintään mahdollisesti kätkettyjen sanomien estämiseksi verkon kontrolli
saattaa poiketa tehokkuusvaatimuksistaan ja esimerkiksi
- pitää yllä joutoliikennettä;
- täyttää paketteja vakiomittaisiksi;
- muunnella hieman reititystä;
- hävittää tahallaan paketin silloin tällöin.
- eheyden turvaaminen: Liikennöintiprotokollien tehtävänä on havaita ja toipua,
jos viestejä tai paketteja katoaa, kopioutuu, muuntuu, pilkkoutuu tai niiden
järjestys vaihtuu. Tämä ei yleensä riitä turvallisuuden kannalta, vaan
ainakin osasta näitä ongelmia on myös tietoturvasta huolehtivien
protokollien oltava tietoisia. Eheysmekanismeina voidaan käyttää aiemmin esillä
olleiden tarkistussummien ja allekirjoitusten lisäksi - mutkikkaammissa
sovelluksissa - käyttää myös kolmatta osapuolta, esim. notaari- tai
aikaleimapalvelua.
Yksi erityinen mekanismi: suodatus palomuurissa
Palomuuri (firewall) on prosessi, joka suodattaa liikennettä ulko- ja sisämaailman
välillä ja päästää läpi vain paikallisen politiikan mukaan oikeutetun liikenteen.
Palomuuria varten on usein oma koneensa, jossa ei ole muita prosesseja.
Palomuurin yleiset vaatimukset ovat samanlaiset kuin viimeksi esillä
olleen yleisen luotetun tietojenkäsittelyperustan (TCB:n):
- sen pitää olla ohittamaton: kaiken liikenteen ulos- ja sisäänpäin täytyy
kulkea sen kautta;
- sen pitää olla riittävän suppea ja yksinkertainen jotta sen toimivuudesta
voidaan vakuuttua;
- siihen itseensä ei voida murtautua.
Palomuurien luokittelut eivät ole aivan vakiintuneita, mutta yleensä
niitä sanotaan olevan kahta tai kolmea päätyyppiä:
- paketteja suodattava reititin ('screening router', 'packet filter'):
ratkaisee pakettien kohtalon niiden otsikkokentissä olevien tietojen perusteella.
Nämä tiedot ovat lähettäjän ja vastaanottajan IP-osoitteet ja porttinumerot,
protokolla, johon paketti kuuluu (yleensä TCP tai UDP). Porttinumerot kertovat
mistä sovelluksesta on kyse ja tämä voi olla suodatusperusteena. On myös syytä
karsia sellaiset ulkoa tulevat paketit, joissa lähettäjäksi on merkitty jokin
sisäpuolinen osoite - ja kääntäen.
- sovellustason yhdyskäytävä, jollainen on proxyn eli sovellustason
suotimen asemassa - siitä nimi 'proxy gateway', joissain yhteyksissä nimityksenä
on 'bastion host'. Tämä on nykyään tavallisempi kuin pakettisuodatin,
mutta voi olla yhdistettynä sellaiseen (esim. niin että pakettisuodatin on
eri laitteessa sisempänä). Suodatus tapahtuu siis pakettia korkeammalla
abstraktiotasolla, joka ottaa huomioon viestien semantiikan kunkin
sovelluksen kannalta.
- Jos proxy-palomuuria vielä monipuolistetaan, saadaan aikaan jotain,
jota kutsutaan myös vahdiksi ('guard'). Siinä tyypillisesti vaikutetaan
sovelluksen kulkuun pelkän kyllä/ei-suodatuksen lisäksi muuntamalla
paketteja vastaamaan jotain politiikkaa. Voidaan esimerkiksi rajoittaa jonkin
sovelluksen kautta tietyn ajan kuluessa lähetettävän tai vastaanotettavan datan
määrää tai periä maksuja jonkin rajan yläpuolella. Voidaan muuntaa liitetiedostoja
sellaisiksi, etteivät makrovirukset "pysy hengissä", tai yleisesti vain
skannata viruksia, jne.
Palomuurien keräämät lokitiedot ovat luonnollisesti tärkeä lähde tunkeutumisen
havaitsemisessa. Palomuurit ovat ilmeisen hyödyllisiä, mutta ne saattavat
rohkaista verkon ylläpitäjää suhtautumaan huolettomasti
niiden sisällä olevan alueen turvallisuuteen. Jos palomuuri murtuu, seurauksena
voi tällöin olla että koko järjestelmä on täysin avoinna hyökkäjälle.
(Vrt. muuan vähemmän ihannoiva
maininta palomuureista.)
Kaksi uudehkoa artikkelia palomuureista:
Joanna Makris: Firewall
Services, More Bark Than Bite, Data Communications, March 1999. (Tech
Tutorial)
David Newman:
Lab Test: Super Firewalls!, Data Communications, May 21, 1999, 50-61
(oikeastaan vain 8 sivua).
Monitasoinen turvallisuus: Myös tietoverkossa voidaan soveltaa monitasoisia
turvajärjestelyjä turvamerkintöineen ja oikeuksineen. Tällaiseen tarkoitukseen
tarvitaan luotettua verkkoliityntää ('trusted network interface'), joka asettuu
käyttäjän koneen ja verkon väliin. Se ei siis ole sama asia kuin palomuuri.
SPAM
Spam, "unsolicited bulk e-mail", eli tilaamatta saatu (ja siis ei-toivottu)
massasähköposti, lyhyesti roskaposti, on melkoinen vaiva paitsi sitä ylimäärin
vastaanottaville käyttäjille, myös postipalvelimille.
Roskapostia voidaan suodattaa palomuurien tapaan siinä vaiheessa kun se saapuu
paikalliseen verkkoon. Ensimmäisenä kriteerinä voidaan käyttää viestin otsikossa
esiintyviä lähettäjätietoja. Koska nämä on helppo väärentää tai käyttää
releöintiä, jolla lähettäjäkoneeksi tulee jokin muu, joudutaan käytännössä
sulkemaan kokonaisia palvelun tarjoajia, ISP:tä, joiden on todettu suhtautuvan
sallivasti roskapostittajiin. Listoja tällaisista osoitteista ylläpitävät mm. ORBS (Open Relay Behaviour-modification System) ja
MAPS RBL (Mail Abuse Orevention Systems's
Realtime Blackhole List). Nämä olivat käytössä Lintulassa syksyllä 1999, mutta
sittemmin niistä luovuttiin ja nyt hylkäyskriteerinä on se, että lähettäjän
domain-nimeä ei löydy DNS-nimipalvelusta.
Käyttäjän oma postiohjelma voi täydentää tällaista suodatusta hylkäämällä
tai ohjaamalla erilliseen postilaatikkoon sellaisia viestejä, joiden sisällön se
tulkitsee ei-toivotuksi, esim. avainsanojen perusteella. Esimerkiksi yli
kolmanneksen spam-postista on havaittu markkinoivan jonkinlaisia
rikastumismahdollisuuksia ja yli kymmeneksen aikuisviihdettä yms.
Vähintään samaa tahtia kuin suodattimet kehittyvät, roskapostin lähettäjät ja
heitä palvelevat ohjelmistonvalmistajat keksivät uusia menetelmiä hankkia
osoitteita ja välttää suodattimia, esimerkiksi muokkaamalla viestiä
henkilökohtaisemmiksi, silti automaattisesti. Millainen torjunta on enää sitten
mahdollista, jos PKI:n yleistyttyä roskaviestitkin tulevat vastaanottajan
julkisella avaimella salattuina ?!
Uudenlaisia torjuntakeinoja on kehitelty, mutta ne vaativat muutoksia
postitusprotokolliin ja sen vuoksi eivät voi yleistyä kovin nopeasti:
- Käyttäjien sähköpostiosoitteet eriytetään koostumaan useista kanavista.
Käyttäjät tiedottavat eri tahoille eri kanavia ja voivat myöhemmin sulkea
sellaisia joita myöten ovat saaneet ei-toivottua postia.
- Postin lähettäminen tehdään maksulliseksi: maksu on pieni ja se hoidetaan
sähköisesti. Asiallisen postin vastaanottaja lupaa maksaa takaisin.
- Maksun sijasta lähettäjä joutuu aina laskemaan jonkin monimutkaisen funktion.
- Postia otetaan vastaan vain suosittelluilta tahoilta.
- Kovin runsaasti postia (ja siis ilmeisesti roskapostiakin) tuottava
palveluntarjoaja, ISP, maksaa sille ISP:lle, jolle lähetys menee.
Lisätietoa artikkelista L.F.Cranor, B.A.LaMacchia:
Spam!, Communications of the ACM, Vol. 41, No. 8 (Aug. 1998), 74-83.
(n. 45 kiloa)