Beberapa panggilan.
Platform apa pun.
Identity Layer terintegrasi dengan desain permukaan minimal. MicroPython pada mikrokontroler €10, Flutter di Android dan Windows, atau PHP bridge dipasang ke endpoint Anda yang ada. Protokol yang sama. Jaminan kriptografi yang sama. Empat panggilan.
Boot ke terverifikasi. 6,5 detik.
Protokol tantangan/respons Ed25519 yang sama yang mengautentikasi pengguna seluler atau operator teregulasi berjalan dengan mikrokontroler €10. Kunci terikat perangkat. Tidak ada basis data kredensial. JWT dikeluarkan pada saat verifikasi.
IdentityIoT,
diinstal melalui 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})
| Komponen | Model | Peran |
|---|---|---|
| MCU | Raspberry Pi Pico 2W (RP2350) | TrustZone, WiFi, penyimpanan kunci terikat perangkat |
| Pembaca NFC | PN532 | Antarmuka I2C, membaca lencana DNA NTAG424 |
| Tampilan | SSD1306 128x64 OLED | Urutan boot, status verifikasi |
| Lencana NFC | NTAG424 DNA (NXP) | AES-128 onboard, kunci yang tidak dapat diekspor, CMAC dinamis |
Identitas terikat perangkat.
Empat panggilan.
Paket lokal. Tidak ada layanan identitas eksternal. Kunci pribadi tidak pernah meninggalkan perangkat.
Penyimpanan aman melalui flutter_secure_storage
dan TEE / Secure Enclave bila tersedia.
Enkripsi muatan dilakukan melalui end-to-end 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
| Peron | Status | Penyimpanan aman |
|---|---|---|
| Android | Produksi, Google Play dihapus | Penyimpanan Kunci Android / TEE |
| Windows | Produksi, Microsoft Store dibersihkan | Manajer Kredensial Windows |
| Linux | Produksi | libsecret |
| iOS / macOS | Di peta jalan | Enklave Aman |
5 KB.
Tumpukan Anda, tidak berubah.
PHP Bridge adalah persyaratan tunggal yang berada di depan endpoint Anda yang ada. Rute Anda, database Anda, logika bisnis Anda. Tak tersentuh.. Identity Layer menangani otentikasi dan enkripsi muatan. Hapus dengan cara yang sama Anda menambahkannya.
require_once
dan dua panggilan fungsi. endpoint Anda mulai menerima muatan terverifikasi dan terdekripsi.
Tidak ada migrasi skema. Tidak ada perubahan tabel pengguna. Tidak ada penyimpanan sesi.
Tumpukan sisi server yang lengkap adalah 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 endpoint
mendaftarkan mandate dan membuka jendela ekspor 72 jam.
Log dihancurkan setelah pengumpulan. Otoritas yang meminta memikul tanggung jawab hukum.
// 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 );
| Komponen | Teknologi | Catatan |
|---|---|---|
| Waktu proses | PHP 8.x | Vanila, tidak diperlukan kerangka kerja |
| Basis data | MySQL / MariaDB | Skema standar, tidak ada kolom kredensial |
| Tembolok / sementara | Redis | Token tantangan, antrian pesan (TTL < 1 menit) |
| Ukuran jembatan | 5 KB | File PHP tunggal, masukkan ke tumpukan LAMP mana pun |
| Ukuran tumpukan penuh | 225 KB | Identity STD + HS + Kunci + Secure Channel + IoT + Label + Tag |
| Penempatan | Kontainer / di lokasi / dengan celah udara | Tidak ada konektivitas cloud wajib |