English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

gäst
1 / ?

Vad gör ett lagringsformat återställningsbart

Fyra lagringsformat, rangordnade efter återställningsbarhet:

FormatÅterställningsbart?ExempelÅterställningsmetod
KlartextJapassword: hunter2Läs filen
Base64JacGFzc3dvcmQ=base64 --decode
Reversibel chiffer (AES)JaENC[AES256:...]Dekryptera med nyckel
Envägshash (bcrypt)Nej$2b$12$...Kan inte återställas; måste brute-force

Klartext, base64 och reversibel chiffer: alla återställningsbara. En enda dump av en autentiseringsdatabas ger en angripare alla lösenord i klartext, för alla användare, samtidigt. Ett intrång; total exponering.

Exemplet med Mailman 2.x

Mailman 2.x (GNU:s e-postlistshanterare): lagrade prenumeranternas lösenord i klartext. Månatligt e-postmeddelande med lösenordspåminnelse: skickade alla prenumeranter deras lösenord i klartext. Två separata brister, båda MOAD-0006:

1. Lagring: klartext i listdatabasen. En serverkompromiss exponerar alla prenumeranters lösenord.

2. Sändning: månatligt e-postmeddelande skickar lösenordet i klartext över SMTP till prenumerantens e-postserver. E-post färdas i klartext över flera SMTP-hopp.

Mailman-teamet designade båda beteendena. Återställning var funktionen: prenumeranter kunde hämta glömda lösenord. Namnet Glass Safe kommer från detta: kassaskåpet förvarar inloggningsuppgifter i synlig form. Alla som når kassaskåpet kan läsa allt innehåll samtidigt.

The Already-Stolen Principle

En inloggningsuppgift som lagras i återställningsbar form är en inloggningsuppgift som redan är stulen. Angriparen har inte kommit än. Intrånget har inte inträffat än. Men arkitekturen garanterar: när ett intrång sker, faller alla inloggningsuppgifter samtidigt. Inget intrång sker isolerat; varje inloggningsuppgift i återställningsbar lagring överförs till angriparen i samma operation.

MOAD-0006 vs MOAD-0004

MOAD-0004 (Logged Secret): inloggningsuppgifter som skrivs till loggar av misstag. Loggskrivningen var inte avsikten; det var en bieffekt av att aktivera header-loggning för felsökning.

MOAD-0006 (Glass Safe): inloggningsuppgifter lagrade i återställningsbar form med avsikt. Återställning var avsikten. Funktionerna för lösenordspåminnelse krävde att lösenordet lagrades. Funktionerna för att visa lösenord krävde att det lagrades. Den arkitektoniska åtagandet till återställning skapade defekten.

Enradig distinktion: MOAD-0004 placerar inloggningsuppgifter i loggar av misstag; MOAD-0006 lagrar inloggningsuppgifter i återställningsbar form med avsikt. Åtgärderna verkar på olika lager.

Structural vs Accidental

Den arkitektoniska skillnaden mellan MOAD-0006 och MOAD-0004 avgör fix-strategin. En oavsiktlig loggskrivning: åtgärda serialiseringslagret. En lagringslösning som är designad för återställning: omdesigna funktionen som krävde återställning.

Varför är en Glass Safe strukturellt annorlunda än MOAD-0004? En rad beskriver varje fel. Vad innebär det för fixen?

Varför bcrypt fungerar

En envägshashfunktion tar emot ett lösenord och producerar en digest med fast längd. Givet digesten kan det ursprungliga lösenordet inte återställas. Inte "svårt att återställa": omöjligt att reversera. Funktionen körs endast i en riktning.

Tre egenskaper som krävs för lagring av autentiseringsuppgifter:

1. Envägsfunktion (preimage resistance). Givet hash(password) finns ingen algoritm som kan återställa password snabbare än brute-force. bcrypt, scrypt och argon2 uppfyller alla denna egenskap.

2. Salt. Ett slumpmässigt värde som läggs till lösenordet före hashningen. Samma lösenord med olika salt ger olika hash. Syfte: motverkar rainbow tables (förberäknade hash-tabeller). Utan salt: en angripare beräknar hash('password123') en gång och kan kontrollera alla 1 miljon användare samtidigt. Med salt: varje användare får en unik hash även för samma lösenord.

3. Långsam av design. bcrypt tar emot en work factor. Högre work factor innebär fler iterationer och längre beräkningstid per hash-försök. Inloggning: 300 ms att hasha en gång. Acceptabelt. Brute-force: 300 ms per försök. Vid 1 miljard försök: 9,5 år per lösenord. Oacceptabelt för en angripare. Långsamheten är en funktion, inte en brist.

import bcrypt

# Lagring: envägs-hash med salt
def store_password(plaintext: str) -> bytes:
return bcrypt.hashpw(plaintext.encode(), bcrypt.gensalt(rounds=12))

# Verifiera: hasha kandidaten & jämför digests
def verify_password(plaintext: str, stored_hash: bytes) -> bool:
return bcrypt.checkpw(plaintext.encode(), stored_hash)

# ALDRIG lagrat: lösenordet i klartext
# ALDRIG återvunnen: klartexten från hashen
# Lösenordsåterställning, inte lösenordspåminnelse

Avvägningen

Envägshashning gör lösenordsåterställning omöjlig. En användare som glömmer sitt lösenord kan inte få det tillbaka. Ett lösenordspåminnelse-e-postmeddelande kan inte finnas. Användarupplevelsen förändras: ”glömt ditt lösenord? återställ det.” Inte en försämring: en säkerhetsgräns. Systemet som inte kan återställa ett lösenord kan inte läcka ett lösenord.

Ett databasintrång som exponerar bcrypt-hashes: alla hashar synliga, inga lösenord synliga. En angripare måste brute-force varje hash individuellt, med 300 ms per försök, och per-användare-salt som omöjliggör förberäknade tabeller. Ett intrång som exponerar klartextlösenord: total omedelbar exponering.

Stark kryptering räcker inte

En säkerhetsgranskning identifierar ett system för lagring av inloggningsuppgifter. Lösenord lagras med AES-256-CBC-kryptering med en server-sida nyckel. Granskningsrapporten markerar det som en Glass Safe-defekt.

Ingenjörsteamet svarar: 'AES-256 är den starkaste symmetriska chiffer som finns. Nyckeln finns i en hårdvarusäkerhetsmodul. Ingen angripare kan dekryptera dessa lösenord.'

Varför förblir detta MOAD-0006 även med stark kryptering? Vad är den korrekta åtgärden?