Få samtaler.
Enhver plattform.
Identity Layer integreres med minimal overflate etter design. MicroPython på en €10 mikrokontroller, Flutter på Android og Windows, eller en PHP-bro falt inn i de eksisterende endepunktene dine. Samme protokoll. De samme kryptografiske garantiene. Fire samtaler.
Start opp for å bekrefte. 6,5 sekunder.
Den samme Ed25519 utfordring/svar-protokollen som autentiserer en mobilbruker eller en regulert operatør kjører på en €10 mikrokontroller. device-bound nøkkel. Ingen legitimasjonsdatabase. JWT utstedt ved verifisering.
IdentityIoT,
installert via mip.
# Install via mip — no external dependencies # import mip; mip.install("github:wide/identity-micropython") from identity_iot import IdentityIoT # 1. Init — configure node identity identity = IdentityIoT( base_url = cfg['base_url'], node_type = cfg['node_type'], tenant_id = cfg['tenant_id'], comm_key = cfg['comm_key'].encode(), comm_iv = cfg['comm_iv'].encode(), ) # 2. Register — device-bound key, runs once identity.ensure_registered() # 3. Authenticate — Ed25519 challenge / verify / JWT token = identity.authenticate() # 4. Authenticated request — AES-256-GCM encrypted payload response = identity.post_encrypted({'request': 'record_sensor_data', 'value': 42})
| Komponent | Modell | Rolle |
|---|---|---|
| MCU | Raspberry Pi Pico 2W (RP2350) | TrustZone, WiFi, device-bound nøkkellagring |
| NFC-leser | PN532 | I2C-grensesnitt, leser NTAG424 DNA-merker |
| Skjerm | SSD1306 128x64 OLED | Oppstartssekvens, bekreftelsesstatus |
| NFC-merke | NTAG424 DNA (NXP) | AES-128 ombord, ikke-eksportable nøkler, dynamisk CMAC |
device-bound identitet.
Fire samtaler.
Lokale pakker. Ingen ekstern identitetstjeneste. Den private nøkkelen forlater aldri enheten.
Sikker lagring via flutter_secure_storage
og TEE / Secure Enclave når tilgjengelig.
payloadkryptering er ende-til-ende via ITEMSEncrypter.
// 1. Init — JWT identity, silent on subsequent boots final auth = IdentityAuthServiceStd(ITEMSGlobals.authURI); await auth.ensureJwt( preferredLocale: locale.languageCode, utcOffsetMin: DateTime.now().timeZoneOffset.inMinutes, ); // 2. Handshake — silent if identity already present on device final result = await api.mjHandshake( identityHash: identityHash, publicKey: publicKey, ); // 3. Store JWT — session active, no password, no credential database await _storage.write(key: 'token', value: result['token']); // 4. Every request — AES-256-GCM payload, end-to-end encrypted final response = await api.postEncrypted({'request': 'your_request'});
dependencies: # Identity Layer — local packages, no external registry identity_package: path: packages/identity_package identity_std: path: packages/identity_std identity_hs: path: packages/identity_hs items_crypto: path: packages/items_crypto
| Plattform | Status | Sikker lagring |
|---|---|---|
| Android | Produksjon, Google Play slettet | Android Keystore / TEE |
| Windows | Produksjon, Microsoft Store ryddet | Windows Credential Manager |
| Linux | Produksjon | libsecret |
| iOS / macOS | På veikart | Sikker enklave |
5 KB.
Din stabel, uendret.
PHP-broen er et enkelt krav som sitter foran de eksisterende endepunktene dine. Dine ruter, din database, din forretningslogikk. Urørt.. Identity Layer håndterer autentisering og payloadkryptering. Fjern den på samme måte som du la den til.
require_once
og to funksjonsanrop. Endepunktene dine begynner å motta bekreftede, dekrypterte payloader.
Ingen skjemamigrering. Ingen endringer i brukertabellen. Ingen øktlagring.
Den komplette server-side stabelen er 225 KB.
// 1. Include the Identity Layer bridge — 5 KB require_once 'identity/_mj_auth.php'; // 2. Authenticate — JWT verified, identity_hash extracted // identity_hash is a 64-char SHA-256 hex — never a user ID [$identityHash, $tenantId, $claims, $role] = mj_authenticate_identity($encoder); // 3. Every response — AES-256-GCM encrypted, end-to-end sendEncryptedResponse($encoder, [ 'status' => 'ok', 'data' => $yourData, ], ['ts' => time()], 200);
mj_mandate_log endepunkt
registrerer fullmakten og åpner et 72-timers eksportvindu.
Logger destrueres etter innsamling. Anmodende myndighet har juridisk ansvar.
// Requires role = admin — never operator [$userId, $tenantId, $claims, $role] = mj_authenticate($encoder); mj_require_role($encoder, $claims, 'admin'); // Register mandate — opens 72h export window // target_identity_hash: 64-char SHA-256, never plaintext identity // Ciphertext is never stored — metadata only $connector->executeDatabaseParameterQuery( "INSERT INTO audit_log (mandate_number, issuing_country, issuing_court, target_identity_hash, export_status) VALUES (?, ?, ?, ?, 'PENDING')", [$mandateNumber, $issuingCountry, $issuingCourt, $targetHash], $db );
| Komponent | Teknologi | Notater |
|---|---|---|
| Kjøretid | PHP 8.x | Vanilje, ingen ramme nødvendig |
| Database | MySQL / MariaDB | Standardskjema, ingen påloggingskolonner |
| Cache / flyktig | Redis | Utfordringstokener, meldingskøer (TTL < 1 min) |
| Brostørrelse | 5 KB | Enkel PHP-fil, slipp i en hvilken som helst LAMP-stabel |
| Full stabel størrelse | 225 KB | Identity STD + HS + Taster + Secure Channel + IoT + Etiketter + Tag |
| Utplassering | Beholder / på stedet / luftgapet | Ingen obligatorisk skytilkobling |