MasterSafe Authenticator: yksityinen, offline-tilassa toimiva autentikaattori ja salasanaholvi

Työpöytäsovellukseni kertakäyttökoodeille ja salasanoille: miten se toimii, miten koodi on rakennettu, kaikki ominaisuudet ja suora arvio sen turvallisuudesta.

MasterSafe Authenticatorin logo

MasterSafe Authenticator on työpöytäsovellus, jota kehitän .NET 10:llä Windowsille ja Linuxille. Se luo tilejäsi suojaavat kertakäyttökoodit (TOTP ja HOTP) ja säilyttää ne salasanojesi kanssa salatussa holvissa omalla tietokoneellasi. Se ei tarvitse tiliä eikä pilveä, eikä se lähetä telemetriaa. Ainoa verkkoyhteys, jonka se koskaan muodostaa, on itse valitsemaasi varmuuskopiopalvelimeen.

Mitä nimi lupaa ja mitä ei: mikään ohjelmisto ei ole murtamaton. Tällä sivulla kerron, mitä MasterSafe suojaa, miten ja missä sen rajat ovat.

297

automaattista testimetodia repositoriossa

27 / 41

OWASP ASVS -kohtaa täyttyy itsearviossani

0

telemetriaa, tilejä tai lokitiedostoja

Kaikki mitä se tekee

Kaikki sovelluksen ominaisuudet käyttötarkoituksen mukaan ryhmiteltyinä. Käyttöliittymä on toistaiseksi englanninkielinen.

Koodit

TOTP ja HOTP

RFC 6238 ja RFC 4226, SHA-1, SHA-256 tai SHA-512 sekä 6 tai 8 numeroa. Lisää tilejä otpauth://-linkistä tai QR-koodikuvasta: vedä kuva ikkunaan tai valitse tiedosto.

Salasanat

Salasanaholvi

KeePass-tyyliset merkinnät ja salasanageneraattori. Kopioidut koodit ja salasanat poistetaan leikepöydältä 30 sekunnin kuluttua.

Salasanat

Kansiot ja joukkotoiminnot

Salasanojen kansiopuu, jossa jokaiselle kansiolle voi valita kuvakkeen 24 vaihtoehdosta. Voit luoda, nimetä uudelleen, siirtää ja poistaa kansioita sekä valita useita merkintöjä siirrettäväksi tai poistettavaksi yhdessä.

Salasanat

Liitetiedostot

Liitä merkintään tiedostoja, enintään 5 MiB tiedostoa kohden ja 50 MiB holvia kohden. Ne säilyvät salattuina holvissa ja sisältyvät palautusvarmuuskopioihin.

Avaus

Kolme avaustapaa

Pääsalasana (Argon2id), Windows Hello tai FIDO2-turva-avain, testattu Thales SafeNet -avaimella. Jokaisella on oma avainpaikkansa.

Istunto

Automaattinen lukitus

Holvi lukittuu valitsemasi käyttämättömyysajan jälkeen. Lukitus pyyhkii avaimen ja puretut tiedot muistista.

Varmuuskopiot

Salatut varmuuskopiot

.sauth-varmuuskopiot paikalliseen kansioon tai WebDAV-palvelimelle, kuten Nextcloudiin tai ownCloudiin, vain https-yhteydellä. Selväkielistä vientiä ei ole.

Palautus

Palautusavain

Palautusavain ja palautusvarmuuskopiot tuovat tietosi takaisin, jos unohdat pääsalasanan. Sovellus voi luoda avaimen salalauseen puolestasi. Takaovea ei ole.

Holvit

Holvit-sivu

Näyttää, missä tiedostosi ovat, avaa minkä tahansa holvitiedoston (USB-muistilta tai toisesta kansiosta) ja arkistoi tai poistaa vanhat holvit vahvistuksen jälkeen.

Tuonti

KeePass-tuonti

Lukee KeePassin ja KeePassXC:n XML- tai CSV-viennit. Ryhmistä tulee kansioita, ja XML-vientien liitetiedostot tuodaan mukana. Ensin näytetään yhteenveto, eikä mitään lisätä ennen vahvistusta.

Julkaisut

Tarkistettavat lataukset

Jokaisella tiedostolla on SHA-256-tarkiste ja kvanttiturvallinen ML-DSA-65-allekirjoitus, ja pieni työkalu tarkistaa ne kaikki kerralla.

Työpöytä

Päivittäinen käyttö

Ilmoitusalue, vaalea ja tumma teema, sovelluksen sisäinen ohje ja asetukset, jotka säilyvät käyttökerrasta toiseen.

Näin holvi suojaa tietojasi

Tilisi ja salasanasi salataan yhdellä satunnaisella 256-bittisellä data-avaimella. Avainta ei koskaan tallenneta sellaisenaan. Se säilytetään kerran kutakin avaustapaa kohden avainpaikassa (slot) suojattuna avaimella, jonka vain kyseinen avaustapa voi tuottaa. Siksi pääsalasanan vaihtaminen tai Windows Hellon lisääminen ei koskaan salaa holvia uudelleen.

Holvin avainhierarkia Pääsalasana Argon2id + suola Windows Hello allekirjoitus + HKDF FIDO2-turva-avain hmac-secret + HKDF Salasanan paikka Hellon paikka Turva-avaimen paikka Satunnainen 256-bittinen data-avain pyyhitään muistista lukittaessa Tilisi ja salasanasi AES-256-GCM
Jokainen avaustapa avaa oman avainpaikkansa, ja kaikki paikat johtavat samaan data-avaimeen. Suojauksessa käytetään AES-256-GCM:ää.
  • Kaikki on todennettu. AES-256-GCM suojaa sisällön, ja myös otsikko ja avainpaikat on sidottu siihen. Yhden holvin osia ei voi siirtää toiseen, eikä avainpaikan tyyppiä voi vaihtaa.
  • Tallennus on atominen. Uusi tiedosto kirjoitetaan ja viedään levylle ensin, sitten se vaihdetaan paikalleen, ja edellinen versio jää nimellä vault.sauth.bak.
  • Tiedostoihin ei luoteta. Argon2-parametrit, tiedostokoot (holvit ja varmuuskopiot 100 MiB), purettu koko (96 MiB) ja liitetiedostot (5 MiB kukin, yhteensä 50 MiB) rajataan ennen työn aloittamista, joten väärennetty tiedosto ei voi kuluttaa muistia loppuun.
  • Väärä avain ei koskaan korvaa tietoja. Ennen tallennusta varmistetaan, että avain avaa nykyisen holvin.

Miten koodi on rakennettu

Ratkaisu on kirjoitettu C#:lla .NET 10:lle, ja sen Avalonia 12 (avautuu uuteen välilehteen) -käyttöliittymä noudattaa MVVM-mallia. Se on jaettu pieniin projekteihin. Riippuvuudet kulkevat yhteen suuntaan: toimialakerros ei tiedä näkymistä mitään, ja kaikki kryptografia on yhdessä kirjastossa. Vain Windowsiin liittyvä koodi on #if WINDOWS -ehdon takana, ja avaustavat toteuttavat yhden rajapinnan, ISecretProvider, joten holvin tiedostomuoto ei riipu alustasta.

MasterSafe-ratkaisun kerrokset KÄYTTÖLIITTYMÄ MasterSafe.App Avalonia 12 -työpöytäsovellus MasterSafe.Cli julkaisujen tarkistus PALVELUT Backup varmuuskopiot, WebDAV Platform Hello, FIDO2, ilmoitusalue QR QR-koodit TIETOTURVA Crypto Argon2id, AES-GCM, avainpaikat PostQuantum ML-KEM, ML-DSA TOIMIALA Core TOTP, HOTP, Base32, otpauth, tilit, salasanat
Riippuvuudet osoittavat alaspäin. Core ei riipu mistään.

Jokaisella projektilla on yksi tehtävä, ja voit lukea ne kaikki GitHubissa:

ProjektiTehtävä
MasterSafe.Core (avautuu uuteen välilehteen)RFC 6238 TOTP, RFC 4226 HOTP, Base32, otpauth-jäsennin, tili-, salasana- ja liitemallit, KeePass-tuonti
MasterSafe.Crypto (avautuu uuteen välilehteen)Argon2id, AES-256-GCM, holvimuoto 3 ja avainpaikat, liitetiedostojen säiliö, atominen tiedostotallennus, rajattu GZip
MasterSafe.PostQuantum (avautuu uuteen välilehteen)ML-KEM-768, hybridi ECDH P-384 + ML-KEM-768, julkaisujen ML-DSA-65-allekirjoitus
MasterSafe.Backup (avautuu uuteen välilehteen)Salasanalla ja palautusavaimella salatut varmuuskopiot, paikallinen kansio ja WebDAV
MasterSafe.Platform (avautuu uuteen välilehteen)Windows Hello- ja FIDO2-avaus, ilmoitusalue
MasterSafe.QR (avautuu uuteen välilehteen)QR-koodien luku ja luonti ZXing.Netillä ja SkiaSharpilla
MasterSafe.App (avautuu uuteen välilehteen)Avalonia-työpöytäkäyttöliittymä: näkymät, näkymämallit ja palvelut
MasterSafe.Cli (avautuu uuteen välilehteen)Julkaisutyökalut: verify-release, verify, fingerprint, keygen, sign

Sovelluksessa on noin 12 400 riviä C#:ta ja XAMLia src-kansiossa ja lisäksi noin 6 000 riviä testejä. Testit kattavat RFC-testivektorit, holvin tietoturvan ja näkymämallit. MasterSafe.Data on tallennuskirjasto, jota sovellus ei tällä hetkellä käytä.

Koodirivit projekteittain MasterSafe.App MasterSafe.App: 6 453 6 453 MasterSafe.Tests MasterSafe.Tests: 6 009 6 009 MasterSafe.Core MasterSafe.Core: 1 449 1 449 MasterSafe.Crypto MasterSafe.Crypto: 1 403 1 403 MasterSafe.Backup MasterSafe.Backup: 799 799 MasterSafe.Data MasterSafe.Data: 656 656 MasterSafe.Platform MasterSafe.Platform: 610 610 MasterSafe.PostQuantum MasterSafe.PostQuantum: 545 545 MasterSafe.QR MasterSafe.QR: 260 260 MasterSafe.Cli MasterSafe.Cli: 178 178
.cs- ja .axaml-tiedostojen rivit projekteittain tyhjät rivit mukaan lukien, versio 1.3.1. Testit on merkitty harmaalla.

Tässä on pieni, todellinen esimerkki säännöstä, jonka mukaan tiedostoihin ei luoteta. Argon2-parametrit tulevat holvitiedostosta, joten Models.cs (avautuu uuteen välilehteen) tarkistaa ne ennen muistin varaamista:

public void Validate()
{
    if (DegreeOfParallelism is < 1 or > MaxParallelism
        || Iterations is < 1 or > MaxIterations
        || MemorySizeKib < 8 * DegreeOfParallelism
        || MemorySizeKib > MaxMemorySizeKib
        || KeyLength != 32)
    {
        throw new InvalidDataException("The key-derivation parameters in this file are outside the accepted range.");
    }
}

Muita hyviä aloituskohtia ovat VaultService.cs (avautuu uuteen välilehteen) avainpaikoille, HybridKemProvider.cs (avautuu uuteen välilehteen) hybridimallille ja Fido2HmacSecretProvider.cs (avautuu uuteen välilehteen) turva-avaimille. Yhtään kryptografista algoritmia ei ole kirjoitettu käsin: ne tulevat .NETistä, käyttöjärjestelmästä ja julkisesta Argon2-kirjastosta.

Jos unohdat pääsalasanan

Takaovea ei ole, joten kadonnutta salasanaa ei voi nollata. Sen sijaan siihen varaudutaan etukäteen. Recovery-sivulla luot palautusavaimen ja aika ajoin palautusvarmuuskopion, jonka vain tämä avain voi avata. Sen voi kirjoittaa mikä tahansa laite, jolla on julkinen avain, eikä sen luomiseen tarvita salasanaa. Voit valita salalauseen itse tai antaa MasterSafen luoda sen: 30 satunnaista merkkiä ilman toisiaan muistuttavia kirjaimia. Se näytetään vain kerran, jotta voit kirjoittaa sen muistiin.

Näin palautusvarmuuskopio salataan Julkinen avain sovellus säilyttää vain tämän Hybridikapselointi ECDH P-384 + ML-KEM-768 Jaettu salaisuus HKDF-SHA-384 Satunnainen data-avain jaettu salaisuus suojaa sen recovery-*.sauth koko holvi, AES-256-GCM
Vain yksityinen palautusavain voi avata varmuuskopion. Se on .msrk-tiedostossa, jota suojaa vähintään 12 merkin salalause, ja tiedosto säilytetään muualla kuin tällä tietokoneella.
  • Kokeile ensin toista avaustapaa. Windows Hello tai turva-avain saattaa yhä avata holvin.
  • Sen jälkeen palauta palautusvarmuuskopio uuteen holviin kirjautumisnäkymän "Forgot your master password?" -toiminnolla.
  • Viimeisenä aloita uusi holvi. Vanha siirtyy arkistoon, sitä ei koskaan poisteta, ja sen voi avata, jos salasana löytyy.

Entä kvanttitietokoneet?

Tänään varastettu salattu data voidaan säilyttää ja murtaa myöhemmin, joten sovelluksen jokainen osa on arvioitu erikseen. ML-KEM ja ML-DSA tulevat .NET 10:stä ja käyttöjärjestelmästä (Windows CNG, Linuxissa OpenSSL 3.5+). Jos tarjoaja puuttuu, koodi pysähtyy eikä tuota heikkoa tulosta.

OsaKvanttitietokoneen vaikutusTilanne
Levyllä oleva holviShorin algoritmi ei päde. Grover laskee AES-256:n noin 128 bittiinTurvassa vahvalla salalauseella
PalautusvarmuuskopiotPelkkä RSA tai elliptiset käyrät murtuisivatHybridi ECDH P-384 + ML-KEM-768: pysyy salassa, jos kumpi tahansa kestää
JulkaisutiedostotRSA- tai ECDSA-allekirjoitukset voitaisiin väärentääAllekirjoitettu ML-DSA-65:llä (FIPS 204)
Turva-avaimen paikkaSymmetrinen HMAC-SHA-256 avaimen sisälläEi vaikuta samalla tavalla kuin RSA:han; avain ja PIN tarvitaan yhä
Windows Hellon paikkaKäyttää TPM:n RSA-avaintaEi vielä kvanttiturvallinen. Turvassa, jos hyökkääjällä on vain holvitiedosto. Jos tämä on sinulle tärkeää, älä lisää Helloa

Kuinka turvallinen se siis on?

Rehellinen vastaus riippuu siitä, kuka hyökkää ja milloin. Tämä on repositorion uhkamalli:

HyökkääjäVoiko hän lukea holvin?Miksi
Varastaa holvin tai varmuuskopionVain arvaamalla pääsalasananAES-256-GCM ja Argon2id. Pitkä salalause on ratkaiseva
Muokkaa holvitiedostoaEiKaikki on todennettu, joten vioittunutta tiedostoa ei avata
Tekee vihamielisen tiedostonEiParametrit, koot ja purku rajataan ensin
Seuraa verkkoaEiUlos lähtee vain salattua dataa, ja WebDAV vaatii https-yhteyden
Haittaohjelma, kun holvi on lukittuEiMikään levyllä ei avaa holvia ilman salasanaa tai Hello-kehotetta
Hänellä on turva-avain mutta ei PIN-koodiaEiAvain vaatii PIN-koodin ja kosketuksen, ja liian monta väärää PIN-koodia lukitsee sen
Hänellä on tietokoneesi ja Windows-PINKyllä, Windows Hellon kauttaHello on yhtä vahva kuin PIN-koodisi tai biometriikkasi
Saa tiedoston, jonka tallensit merkinnästäKyllä, sen tiedostonTallennettu liite on tavallinen tiedosto levyllä holvin ulkopuolella. Poista se, kun et enää tarvitse sitä
Haittaohjelma, kun holvi on avattuKylläOmilla oikeuksillasi toimiva ohjelma voi lukea avatun sovelluksen. Automaattinen lukitus vain lyhentää aikaikkunaa

Salasanan arvaamisen hidastaminen

Jos joku varastaa tiedoston, jokainen pääsalasanan arvaus maksaa Argon2id:n kustannuksen. Oletusarvot ovat 128 MiB muistia, 3 kierrosta ja 4 kaistaa, kun OWASPin vähimmäisvaatimus on 19 MiB ja 2 kierrosta. Uusissa pääsalasanoissa on oltava vähintään 12 merkkiä.

Argon2id-muisti arvausta kohden OWASPin vähimmäisarvo OWASPin vähimmäisarvo: 19 MiB 19 MiB MasterSafe MasterSafe: 128 MiB 128 MiB
Suurempi muistimäärä arvausta kohden kallistaa laajamittaista murtolaitteistoa. Se auttaa hyvää salalausetta, mutta ei pelasta heikkoa.

Itsearvio OWASP ASVS:n pohjalta

Arvioin sovelluksen niiden OWASP ASVS 4.0.3 (avautuu uuteen välilehteen) -osien perusteella, jotka koskevat offline-työpöytäohjelmaa, ja koko tarkistuslista (avautuu uuteen välilehteen) on julkinen. Kyseessä on itsearvio, ei sertifiointi.

OWASP ASVS 4.0.3 -kohdat tuloksen mukaan Täyttyy Täyttyy: 27 27 Osittain Osittain: 7 7 Puute Puute: 4 4 Ei koske Ei koske: 3 3
Tarkistuslistan ASVS-taulukon 41 riviä. Täyttyy tarkoittaa, että kohta on toteutettu ja testien tai CI:n kattama.

Tunnetut rajoitukset

Niitä ei ole piilotettu pieneen präntiin. Ne on lueteltu myös repositoriossa:

  • Sovellukselle ei ole vielä tehty riippumatonta tietoturvatarkastusta.
  • Uusia pääsalasanoja ei verrata vuotaneiden salasanojen listoihin, eikä sovellus viivästytä yrityksiä väärien salasanojen jälkeen.
  • Windows-asennusohjelmassa ei ole Authenticode-allekirjoitusta, joten SmartScreen varoittaa siitä. ML-DSA-65-allekirjoitus on tapa tarkistaa se.
  • Windowsin leikepöytähistoria voi tallentaa kopioidun arvon ennen sen poistamista.
  • Kirjoittamasi pääsalasana on .NET-merkkijono, jota ei voi pyyhkiä muistista ennen roskienkeruuta.
  • Laitteistoavaus toimii vain Windowsissa, ja toistaiseksi holvia kohden voi olla vain yksi turva-avain. Linuxissa avataan pääsalasanalla.
  • Linux-paketti käännetään ja testataan CI:ssä, mutta sitä ei ole vielä kokeiltu oikealla Linux-työpöydällä.

Lyhyesti: pitkällä salalauseella varastettu holvi tai varmuuskopio on erittäin hyvin suojattu, eivätkä salaisuutesi koskaan näy verkossa. Sovellus ei voi suojata haittaohjelmalta, joka toimii omilla oikeuksillasi holvin ollessa auki. Pidä sitä huolella tehtynä, avoimesti dokumentoituna henkilökohtaisena projektina, jolle ei ole vielä tehty ulkopuolista auditointia.

Näin jokainen julkaisu tarkistetaan

Käytännössä moni tietoturvaongelma johtuu vanhentuneista osista, joten prosessi tekee tämän työn jokaisessa muutoksessa. Tunnetusti haavoittuvainen paketti kaataa käännöksen, CodeQL ja Gitleaks ajetaan jokaisen pushin yhteydessä, Dependabot ehdottaa päivityksiä ja CI luo SBOM-luettelon, joka liitetään julkaisuun. Lisäksi jokaiseen julkaisuun paketoidaan käännöshetken uusin päivitetty .NET-ajonaikainen ympäristö.

Koodimuutoksesta allekirjoitettuun julkaisuun Jokainen push GitHub Actions Käännös ja testit Windows + Linux Pakettien tarkastus kaatuu, jos haavoittuva CodeQL + Gitleaks koodin ja salaisuuksien skannaus Versiotunniste itsenäiset käännökset ML-DSA-65 + SHA-256-tarkiste
Ylärivi ja koodiskannaukset ajetaan jokaisessa muutoksessa. Versiotunniste kääntää, allekirjoittaa ja valmistelee julkaisuluonnoksen.

Lataus ja tarkistus

Hae versio 1.3.1 julkaisusivulta (avautuu uuteen välilehteen): asennusohjelma Windows 10:lle ja 11:lle (x64) tai paketti Linuxille (x64 tai arm64). .NETiä ei tarvitse asentaa. Lataa kaikki tiedostot samaan kansioon, myös masterSafe-release.pub ja MasterSafe-Cli-työkalu, ja suorita:

MasterSafe-Cli-1.3.1-win-x64.exe verify-release . masterSafe-release.pub

Jokaisen tiedoston kohdalla on näyttävä signature valid, checksum ok, ja ensimmäiseksi tulostuvan avaimen sormenjäljen on oltava:

28ad8deb1624d6f04fe9100e25edb2666ad904e02824af14ef2fe6c8d2a74b8a

Täydelliset ohjeet, myös tarkistustyökalun kääntäminen lähdekoodista, ovat README-tiedostossa (avautuu uuteen välilehteen).

Lisenssi ja ongelmista ilmoittaminen

MasterSafe Authenticator on ilmainen henkilökohtaiseen, ei-kaupalliseen käyttöön. Lähdekoodi on saatavilla tarkastelua ja henkilökohtaista käyttöä varten, mutta se ei ole avointa lähdekoodia: kaupallinen käyttö ja muokattujen versioiden jakelu eivät ole sallittuja. Katso lisenssi (avautuu uuteen välilehteen). Kolmansien osapuolten komponenteilla on omat lisenssinsä, jotka on lueteltu ilmoituksissa (avautuu uuteen välilehteen).

Jos löydät tietoturvaongelman, käytä GitHubin yksityistä ilmoituskanavaa (avautuu uuteen välilehteen) julkisen issuen sijaan.

Lisätietoa repositoriossa