🔐 Kryptografische Block-Signaturen
Signieren Sie Ihre Blöcke, um Authentizität und Nicht-Abstreitbarkeit zu garantieren
Einführung
SoWasIt ermöglicht es Ihnen, Ihre Blöcke kryptografisch zu signieren, um deren Authentizität und Nicht-Abstreitbarkeit zu garantieren. Mit einer Public Key Infrastructure (PKI) und ECDSA P-256-Algorithmen können Sie beweisen, dass Ihre Organisation einen bestimmten Block erstellt hat.
- Regulatorische Compliance (qualifizierte elektronische Signatur)
- Rechtlicher Nachweis der Datenerstellung
- Erweiterte Audit-Trail und Rückverfolgbarkeit
- Nicht-Abstreitbarkeit von Transaktionen
Warum einen Partner signieren lassen?
Konkretes Szenario: ein Lieferstreit
TechCorp bezieht Komponenten von SupplyPro und verwaltet seine Lieferungen in einer SoWasIt-Chain. Hier ist, was passiert, je nachdem ob SupplyPro die Blöcke signiert oder nicht.
❌ Ohne Partnersignatur — das Problem
Am 15. Januar liefert SupplyPro Komponenten. TechCorp erfasst selbst einen Block: "Lieferung erhalten: 500 Einheiten, Ref. ABC-789".
Drei Monate später schickt SupplyPro eine Rechnung für 800 Einheiten und behauptet, diese Menge geliefert zu haben. TechCorp zeigt Blöcke mit "500 Einheiten"... aber SupplyPro argumentiert, dass TechCorp diese Blöcke selbst erstellt hat. Nichts hinderte TechCorp daran, 500 statt 800 einzutragen, um die Rechnung zu reduzieren. Es steht Aussage gegen Aussage.
Das Problem: Wenn Sie die Daten im Namen Ihres Partners erfassen, beweist nichts, dass der Partner mit dem Eingetragenen einverstanden war.
✅ Mit Partnersignatur — die Lösung
SupplyPro generiert sein ECDSA-Schlüsselpaar mit @sowasit/signer und registriert es bei TechCorp. Von nun an erstellt und signiert SupplyPros eigenes System jeden Bestätigungsblock: "Lieferung bestätigt: 500 Einheiten, Ref. ABC-789". Optional kann TechCorp eine Version des Blocks erneut veröffentlichen, die es selbst signiert, um den Empfang zu bestätigen. Über einen Webhook wird der Zusteller benachrichtigt und die Lieferung ist abgesichert.
Drei Monate später schickt SupplyPro dennoch eine Rechnung für 800 Einheiten. TechCorp zeigt den von SupplyPro selbst signierten Block, der 500 gelieferte Einheiten bescheinigt. SupplyPros kryptografische Signatur ist da, verifizierbar und unwiderruflich — SupplyPro kann nicht behaupten, 800 geliefert zu haben.
Im Streitfall präsentiert TechCorp die von SupplyPro signierten Blöcke. Der Beweis ist kryptografisch unwiderlegbar und rechtlich durchsetzbar: SupplyPro hat die Zahl selbst zertifiziert.
Weitere Anwendungsfälle
Das gleiche Prinzip gilt in vielen Branchen:
- Ein Spediteur signiert Lieferscheine in Ihrer Logistik-Chain
- Eine Zertifizierungsstelle signiert Ihre Qualitätsprüfungsblöcke
- Ein Dienstleister signiert seine Serviceberichte in Ihrem CMMS
- Ein Kunde signiert seine Bestell- oder Empfangsvalidierung
- Ein Finanzpartner signiert Zahlungsbestätigungen
Schlüssel-Lebenszyklus
CLI-Installation
Das @sowasit/signer-Paket ist auf NPM verfügbar und kann als CLI-Tool oder JavaScript/TypeScript-Bibliothek verwendet werden.
Globale Installation (CLI)
npm install -g @sowasit/signerLokale Installation (Bibliothek)
npm install @sowasit/signerSchnellstart
1. Schlüsselpaar generieren und registrieren (Partner)
Holen Sie sich zunächst einen Registrierungs-Token vom Kettenbesitzer, dann:
signer add-key \
--token YOUR_ENROLLMENT_TOKEN \
--api-key YOUR_API_KEY \
--passphrase your-secret-passphrase \
--output ./keys \
--client-name "Your Company Name" \
--client-contact "admin@company.com"Dieser Befehl wird:
- Ein ECDSA P-256-Schlüsselpaar generieren
- Den öffentlichen Schlüssel bei SoWasIt registrieren
- Die Schlüssel lokal in ./keys/ speichern
- Ein Zertifizierungsdokument zum Drucken, Signieren und Hochladen generieren
2. Zertifizierung abschließen (Partner)
- Das generierte Zertifizierungsdokument drucken (sowasit.certification.txt)
- Es signieren und stempeln (rechtliche Signatur Ihres Unternehmens)
- Es als PDF scannen
- Es über die API oder das Dashboard hochladen
3. Einen signierten Block erstellen (Partner)
Sobald der Kettenbesitzer Ihren Schlüssel aktiviert hat (status = active), können Sie Blöcke signieren:
signer create-block \
--chain ch_abc123 \
--key ./keys/sowasit.private.pem \
--key-id f1a2b3c4d5e6f7g8 \
--api-key sk_your_api_key \
--content-file ./data.json \
--passphrase your-secret-passphraseCLI-Referenz
signer add-key
Generiert ein neues Schlüsselpaar und registriert es bei SoWasIt.
| Option | Description | Required |
|---|---|---|
-t, --token | Registrierungs-Token von SoWasIt | ✓ |
-k, --api-key | Ihr SoWasIt-API-Schlüssel | ✓ |
-o, --output | Ausgabeverzeichnis (Standard: ./keys) | |
-p, --passphrase | Passphrase zum Verschlüsseln des privaten Schlüssels | Empfohlen |
--client-name | Name Ihres Unternehmens | |
--client-contact | Kontakt-E-Mail |
signer sign
Signiert Inhalte mit Ihrem privaten Schlüssel (ohne einen Block zu erstellen).
signer sign \
--key ./keys/sowasit.private.pem \
--data ./content.json \
--passphrase secret \
--output ./signature.jsonsigner create-block
Erstellt einen signierten Block direkt auf SoWasIt.
signer create-block \
--chain ch_abc123 \
--key ./keys/sowasit.private.pem \
--key-id f1a2b3c4 \
--api-key sk_xxx \
--content '{"order": "ORD-001", "status": "shipped"}' \
--passphrase secretProgrammatische Nutzung (JavaScript/TypeScript)
Schlüsselpaar generieren
import { KeyManager } from '@sowasit/signer';
// Generate key pair
const keyPair = await KeyManager.generateKeyPair({
passphrase: 'your-secret-passphrase'
});
// Save to disk
await KeyManager.saveKeyPair(keyPair, './keys', 'my-company');
console.log('Key ID:', keyPair.keyId);
console.log('Fingerprint:', keyPair.fingerprint);Inhalt signieren
import { KeyManager } from '@sowasit/signer';
const content = {
transaction_id: 'TXN-001',
amount: 1500.00,
timestamp: Date.now()
};
const privateKey = await KeyManager.loadPrivateKey(
'./keys/my-company.private.pem',
'your-passphrase'
);
const { signature, algorithm } = KeyManager.signContent(
content,
privateKey
);
console.log('Signature:', signature);Signierten Block erstellen
import { SoWasItClient } from '@sowasit/signer';
import fs from 'node:fs/promises';
const client = new SoWasItClient({
apiKey: 'sk_your_api_key'
});
const content = {
event: 'product_shipped',
order_id: 'ORD-12345',
timestamp: Date.now()
};
const privateKeyPem = await fs.readFile('./keys/my-company.private.pem', 'utf-8');
const response = await client.createSignedBlock(
'ch_your_chain_id',
content,
privateKeyPem,
'your_public_key_id',
'your-passphrase'
);
console.log('Block created:', response.block);Sicherheits-Best-Practices
🔒 Schutz privater Schlüssel
- Verwenden Sie immer eine Passphrase, um Ihren privaten Schlüssel zu verschlüsseln
- Committen Sie niemals private Schlüssel in Git
- Speichern Sie Schlüssel in einem Passwort-Manager oder HSM
- Private Schlüssel werden automatisch mit Berechtigungen 0600 gespeichert
🔄 Schlüsselrotation
- Generieren Sie regelmäßig neue Schlüssel (alle 6-12 Monate)
- Verwenden Sie den Ersetzungsmechanismus während der Rotation
- Widerrufen Sie alte Schlüssel nach der Migration
⚠️ Im Falle einer Kompromittierung
- Widerrufen Sie sofort den kompromittierten Schlüssel
- Generieren Sie ein neues Schlüsselpaar
- Benachrichtigen Sie bei Bedarf das SoWasIt-Team
API-Endpunkte
POST /keys/enrollment-tokens
Generiert einen einmaligen Registrierungs-Token (7 Tage Gültigkeit).
curl -X POST https://api.sowasit.io/v1/keys/enrollment-tokens \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"authorized_by": "admin@company.com"
},
"validity_days": 7
}'POST /keys/register
Registriert einen öffentlichen Schlüssel mit einem Registrierungs-Token.
curl -X POST https://api.sowasit.io/v1/keys/register \
-H "Content-Type: application/json" \
-d '{
"enrollment_token": "abc123...",
"public_key": "-----BEGIN PUBLIC KEY-----\n...",
"algorithm": "ECDSA-P-256",
"client_info": {
"name": "My Company SARL",
"siret": "12345678901234",
"contact": "admin@company.com"
}
}'GET /keys
Listet alle Ihre öffentlichen Schlüssel auf.
curl https://api.sowasit.io/v1/keys \
-H "Authorization: Bearer YOUR_API_KEY"POST /keys/{keyId}/revoke
Widerruft einen öffentlichen Schlüssel.
curl -X POST https://api.sowasit.io/v1/keys/abc123/revoke \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "Key compromised"
}'Fehlerbehebung
❌ "Block signature is required: tenant has active public keys"
Ihr Mandant hat registrierte aktive Schlüssel, daher müssen alle Blöcke signiert werden.
Lösung: Verwenden Sie signer create-block oder signieren Sie manuell mit signer sign.
❌ "Invalid passphrase for encrypted private key"
Ihr Schlüssel ist verschlüsselt, aber Sie haben die falsche Passphrase oder keine Passphrase angegeben.
Lösung: Geben Sie die richtige Passphrase mit --passphrase an.
❌ "Invalid block signature"
Die Signaturverifizierung ist fehlgeschlagen.
Mögliche Ursachen:
- Der Inhalt wurde nach der Signierung geändert
- Falscher privater Schlüssel verwendet
- Ungültiges Signaturformat
- Die öffentliche Schlüssel-ID stimmt nicht mit dem Signaturschlüssel überein
❌ "Public key is not active"
Der Schlüssel ist noch nicht aktiviert oder wurde widerrufen.
Lösung: Überprüfen Sie den Schlüsselstatus in Ihrem Dashboard. Schließen Sie die Zertifizierung ab, falls erforderlich.
Support
- Vollständige Dokumentation: sowasit.io/documentation
- NPM-Paket: @sowasit/signer
- Dashboard: sowasit.io/dashboard
- E-Mail: support@sowasit.io