Ich baue einen kleinen Python-Client für einen FastAPI-Dienst, der einmalig verschlüsselte Nachrichten sendet. Schlüssel müssen auf dem Client verbleiben (niemals an den Server gesendet oder dort gespeichert).
Env/Libraries
[*]Python 3.11
[*][PyNaCl] für />Behalten Sie ein langlebiges PyNaCl-Schlüsselpaar zwischen den Läufen bei. Ich möchte, dass der private Schlüssel im Ruhezustand auf der Festplatte verschlüsselt und erst entschlüsselt wird, nachdem der Benutzer eine Passphrase eingegeben hat (oder alternativ den Schlüsselbund des Betriebssystems verwenden, wenn dies als Best Practice angesehen wird).
Was ich versucht habe
Den rohen privaten 32-Byte-Schlüssel in eine Datei schreiben → einfach, aber im Ruhezustand offensichtlich nicht sicher.
Verwendung von Kryptografie zum Ableiten eines Schlüssels aus einem Passphrase (Scrypt) und verschlüsseln Sie den privaten Schlüssel mit AES-GCM, bevor Sie ihn auf die Festplatte schreiben. Das funktioniert, aber ich bin mir über die empfohlenen Parameter/Muster nicht sicher.
Verwenden des Schlüsselringpakets zum Speichern des privaten Schlüssels im Anmeldeinformationsspeicher des Betriebssystems (Windows DPAPI / macOS-Schlüsselbund / Secret Service). Dadurch werden Passphrasen vermieden, aber ich bin mir nicht sicher, was Portabilität und Sicherung/Wiederherstellung betrifft.
Minimale Repro (Skizze)
Python 3.11
pip install pynacl cryptography
Ist „Von Verschlüsselung abgeleiteter Schlüssel + AES-GCM-Verpackung, dann JSON in einer Datei speichern“ ein sinnvolles Muster für die clientseitige Schlüsselpersistenz mit PyNaCl? Irgendwelche empfohlenen Scrypt-Parameter für Desktops im Jahr 2025?
Würden Sie stattdessen die Verwendung des Betriebssystem-Schlüsselbunds per Schlüsselbund empfehlen (und wenn ja, wie kann man 32 Rohbytes sicher und portabel speichern)?
Gibt es Fallstricke mit X25519-Schlüsseln in PyNaCl bei dieser Serialisierung/Deserialisierung?
Einschränkungen
Ich kann keine Geheimnisse auf dem Server speichern. Es ist in Ordnung, den Benutzer beim Start nach einer Passphrase zu fragen; keine UI-Frameworks erforderlich.
Erwartet:
Anleitung oder Beispielcode, der den empfohlenen Ansatz (mit Passphrase umschlossene Datei vs. Betriebssystem-Schlüsselbund) und Parameteroptionen (Verschlüsselungskosten, AES-GCM-Nonce-Handhabung usw.) zeigt.
Ich baue einen kleinen Python-Client für einen FastAPI-Dienst, der einmalig verschlüsselte Nachrichten sendet. Schlüssel müssen auf dem Client verbleiben (niemals an den Server gesendet oder dort gespeichert). Env/Libraries
[*]Python 3.11 [*][PyNaCl] für />Behalten Sie ein langlebiges PyNaCl-Schlüsselpaar zwischen den Läufen bei. Ich möchte, dass der private Schlüssel im Ruhezustand auf der Festplatte verschlüsselt und erst entschlüsselt wird, nachdem der Benutzer eine Passphrase eingegeben hat (oder alternativ den Schlüsselbund des Betriebssystems verwenden, wenn dies als Best Practice angesehen wird). Was ich versucht habe [list] Den rohen privaten 32-Byte-Schlüssel in eine Datei schreiben → einfach, aber im Ruhezustand offensichtlich nicht sicher.
[*]Verwendung von Kryptografie zum Ableiten eines Schlüssels aus einem Passphrase (Scrypt) und verschlüsseln Sie den privaten Schlüssel mit AES-GCM, bevor Sie ihn auf die Festplatte schreiben. Das funktioniert, aber ich bin mir über die empfohlenen Parameter/Muster nicht sicher.
[*]Verwenden des Schlüsselringpakets zum Speichern des privaten Schlüssels im Anmeldeinformationsspeicher des Betriebssystems (Windows DPAPI / macOS-Schlüsselbund / Secret Service). Dadurch werden Passphrasen vermieden, aber ich bin mir nicht sicher, was Portabilität und Sicherung/Wiederherstellung betrifft. Minimale Repro (Skizze) Python 3.11 pip install pynacl cryptography [code]from nacl.public import PrivateKey from cryptography.hazmat.primitives.kdf.scrypt import Scrypt from cryptography.hazmat.primitives.ciphers.aead import AESGCM from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend import os, json, base64
# 1) Generate sk = PrivateKey.generate() pk = sk.public_key sk_bytes = bytes(sk) # 32 bytes pk_bytes = bytes(pk) # 32 bytes (saved in clear is fine)
[/list] Fragen [list] [*]Ist „Von Verschlüsselung abgeleiteter Schlüssel + AES-GCM-Verpackung, dann JSON in einer Datei speichern“ ein sinnvolles Muster für die clientseitige Schlüsselpersistenz mit PyNaCl? Irgendwelche empfohlenen Scrypt-Parameter für Desktops im Jahr 2025? [*]Würden Sie stattdessen die Verwendung des Betriebssystem-Schlüsselbunds per Schlüsselbund empfehlen (und wenn ja, wie kann man 32 Rohbytes sicher und portabel speichern)? [*]Gibt es Fallstricke mit X25519-Schlüsseln in PyNaCl bei dieser Serialisierung/Deserialisierung? Einschränkungen Ich kann keine Geheimnisse auf dem Server speichern. Es ist in Ordnung, den Benutzer beim Start nach einer Passphrase zu fragen; keine UI-Frameworks erforderlich. Erwartet: Anleitung oder Beispielcode, der den empfohlenen Ansatz (mit Passphrase umschlossene Datei vs. Betriebssystem-Schlüsselbund) und Parameteroptionen (Verschlüsselungskosten, AES-GCM-Nonce-Handhabung usw.) zeigt. [/list]
Ich versuche, die Grenze einer Festplatte durch das Schreiben/Lesen von It Unil System zurückzufordern. Returns Fehler. Dann weiß ich, wo die Grenze ist.
Also habe ich diese Python verwendet Skript...
Wie kann ich die Seriennummer eines Hartscheibe mit Python unter Linux ? > Ich möchte ein Python -Modul verwenden, um dies zu tun, anstatt ein externes Programm wie HDParm auszuführen. Vielleicht mit...
Wenn ich final exe beim Kompilieren unter sauberem Windows 10 ausführe, erhalte ich die Fehlermeldung „libstdc++-6.dll nicht gefunden“.
Kompilierungsbefehle, die ich bisher ausprobiert habe...
Wenn ich final exe beim Kompilieren unter sauberem Windows 10 ausführe, erhalte ich die Fehlermeldung „libstdc++-6.dll nicht gefunden“.
Kompilierungsbefehle, die ich bisher ausprobiert habe...