SSK: Signed Subspace Key
Alla filer i Freenet identifieras och begärs med en
filnyckel eller
index, på ett liknande sätt som vanliga websiter identifieras med ett domännamn.
Signed Subspace Keys är vanligtvis till för Freenet-siter som kommer att ändras över tiden, till exempel en website som uppdateras med nyheter, eller information som måste rättas till, läggas till eller tas bort. De fungerar på så vis att någon annan än upphovsmannen/kvinnan inte kan lägga upp en nyare version och låtsas att det var han/hon som gjorde det.
Det fungerar genom att använda publika kryptografiska nycklar så att du kan signera din site. Bara en person med din hemliga nyckel kan lägga till en uppdaterad version av din site i Freenet.
Adressen till en SSK-site ser ut som något liknande det här (mitten av adressen har klippts för att passa sidan):
http://localhost:8888/SSK@CxRxWs...BAAE/mysite-4/
Den till synes slumpmässiga texten i mitten är en pekare till den publika nyckeln, och också en symmetrisk privat nyckel.
mysite-delen är en text-sträng som valts av upphovsmannen/kvinnan, och
4an är versionen av siten. Versionsnumret ökas varje gång du skapar en ny version av siten och infogar den i Freenet. Detta tillvägagångssätt används eftersom det i skrivande stund inte är möjligt att uppdatera data i Freenet. Det är heller inte troligt att det kommer att finnas i nära eller inte så nära framtid.
Uppdaterbara Subspace Keys gör detta ännu mer transparent för användaren.
Här är ett exempel på en adress till en riktig SKK-site i Freenet. Det borde vara en stress-testsida:
http://localhost:8888/SSK@GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w,c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs,AQABAAE/testinserts-3/∞
GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w är hashen/kontrollsumman av den publika nyckeln. Den här delen är allt som behövs för att unikt identifiera filen (men inte att dekryptera den), så noderna på Freenet behöver bara spara den här biten. Den riktiga publika nyckeln är lagrad (okrypterad) med (den krypterade) datan.
c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs är dokumentets dekrypteringsnyckel. Denna är bara känd för klienterna och inte för noderna som lagrar datan, så noder kan inte dekryptera datat de lagrar utan den fulla adressen.
AQABAAE är krypteringssinställningar etc.
Signed Subspace Key siter har i mångt och mycket blivit ersatta av
Updatable Subspace Key (USK) siter, vilka baseras på SSK-nycklar men möjliggör länkar som alltid hämtar den mest uppdaterade versionen av siten.
Exempel
Det finns grafiska verktyg som
jSite för att hjälpa dig att enkelt lägga till freesites i Freenet, men av pedagogiska skäl ska vi använda Freenets
telnetgränssnitt för att visa hur processen att lägga till en SSK Freesite går till, steg för steg.
- Skapa en katalog på din dator och ge den ett namn, som till exempel mysite, med ett antal HTML-filer i, en som heter index.html.
- Anslut till telnetgränssnittet genom att skriva:
telnet localhost 2323
- Först måste vi generera ett kryptografiskt nyckelpar. Detta görs slumpmässigt varje gång och åstadkommer två nycklar: en för att signera filerna (den privata nyckeln) och en (den publika nyckeln) för att verifiera signaturen. Skriv:
MAKESSK
- Detta kommer att returnera två strängar av till synes slumpmässiga tecken, en Insert URI (den privata nyckeln för att kryptera och signera) och en Request URI (för dekryptering och verifikation av signaturer). Till exempel:
Insert URI:
SSK@AIfB3XMup9~D7o5LaKaOV8sV9LWayoegCtiH88gc-xuD,V27XCqRZYUOVFltYPSKGv9gQticpsg13DjSoBCob3a8
Request URI:
SSK@~cnUlnYEwS~nRs9y6~yXmZeLgil8MRhe8VBea4gn1Fo,V27XCqRZYUOVFltYPSKGv9gQticpsg13DjSoBCob3a8,AQABAAE
- Nu vill vi ladda upp katalogen och dess innehåll i Freenet och få en länk för att kunna komma åt dem i Freenet. Skriv följande, och byt ut "..." i mitten (vilket vi har gjort för att få plats på sidan) med hela Insert URIn.:
PUTSSKDIR: SSK@AIfB3XMup9...CtiH88gc-xuD,V27XCqRZY...oBCob3a8/testsite#/sökväg/till/mysite#index.html
Detta ska ladda upp innehållet i /sökväg/till/mysite-katalogen i Freenet, med index.html som default-fil, krypterat och signerat med den privata nyckeln vi just genererade. Ha tålamod, detta kan ta några minuter. Till slut bör kommandot åstadkomma ett liknande meddelande: (mittenbitarna bortklippta för att passa sidan):
====URI: freenet:SSK@~cnUlnYEwS...4gn1Fo,V27XCqRZY...oBCob3a8,AQABAAE/testsite/====
- Vi kan kolla om siten fungerar genom att besöka denn adress i en webläsare:
Hur SSK-nycklar fungerar
Upphovsmannen/kvinnan genererar ett kryptografiskt nyckelpar: en privat nyckel för signering av filer och en publik nyckel för att verifiera signaturen.
Upphovsmannen/kvinnan genererar också en symmetrisk nyckel (som används både kryptering och dekryptering).
När en fil blir infogad i Freenet, krypteras den med den
symmetriska nyckeln och signeras med den
privata nyckeln. Signaturen sparas med filen. Freenet-noder lagrar inte den
symmetriska nyckeln, bara den
publika nyckel-delen av SSK-nyckeln, som ett index till datan. Detta eftersom det ska gå att
förneka kännedom om datan på noden de sitter på.
SSK-nyckeln skapas av en hash/kontrollsumma av den publika nyckeln och den symmetriska nyckeln. Hashen/kontrollsumman tjänar som index till datan vid sökning. Den riktiga (okrypterade) nyckeln är lagrad med (den krypterade) datan. Detta för att Freenet-noder ska kunna verifiera signaturen när en SSK-fil kommer till deras nod, och också så att klienter kan verifiera signaturen när filerna hämtas. Den symmetriska nyckeln är för att klienterna ska kunna dekryptera filerna.
TODO
- Explain what cipher/mode/size is used for the public/private keypair
- Explain what cipher/mode/size is used for the symmetric key
- Explain the breakdown of the small 'tail' part of public SSK URIs, eg the ',AQABAAE' part of the above example
- Explain which hash/mode is used for the H(pubkey) part of SSK public URIs. (Is it SHA(256)? SHA(1)?)