Richiesta di Autenticazione FID
Un'applicazione federata sta richiedendo la verifica della tua identità tramite firma a conoscenza zero.
La tua chiave master non lascia mai questo browser. L'istanza riceve una firma temporanea e la chiave ActivityPub derivata solo per questo dominio, che le serve per firmare le tue attività federate: potrà agire come te su questa istanza, e solo lì. La tua identità sulle altre istanze resta inaccessibile.
Introducing Fediverse-ID 1.0
FID è il protocollo di autenticazione crittografica e Single Sign-On (SSO) basato su Zen SEA per applicazioni ActivityPub, istanze TuneCamp e la rete decentralizzata P2P.
Master Key Source
La tua identità si deriva da alias + passphrase. Nessun account, nessun server: le stesse due parole riproducono la stessa identità su qualsiasi dispositivo, e da lì un'identità ActivityPub deterministica per dominio/username.
Zen SEA Keys
Le tue chiavi crittografiche attive risiedono esclusivamente nel browser e non vengono mai trasmesse.
Instance Registry
Collega i tuoi artisti su diverse istanze TuneCamp. Il portal aggrega il tuo profilo unificato.
Nessuna istanza collegata. Aggiungi la prima sotto.
Zen Graph Relay
Connessione WebSocket diretta al nodo di relay P2P per la propagazione del grafo di identità.
ActivityPub Persona Sandbox
Derivazione deterministica degli indirizzi WebFinger ed Ed25519 PBKDF2 seed per il Fediverse.
FidSsoToken Payload Structure
// Clicca "Aggiorna Payload" per generare il JSON live del FidSsoToken
Architettura e Flusso di Autenticazione
FID elimina la necessità di password memorizzate sui server centralizzati e riduce il rischio di phishing nel Fediverso attraverso un flusso crittografico a tre fasi.
Identità Master Globale
L'utente sblocca la sua coppia di chiavi Zen SEA secp256k1 sul browser usando alias + passphrase. La chiave master non viene mai trasmessa via rete.
Derivazione Isolata del Seed
Per ogni dominio di destinazione (es. un'istanza TuneCamp), il portale calcola un seed crittografico a 32 byte isolato, impedendo la tracciabilità tra diverse istanze.
Firma del Token & Codice Monouso
Il portale firma a conoscenza zero il token SSO e invia il seed all'istanza via POST, che genera un codice di login monouso rimediabile in sicurezza dal browser.
Componenti Crittografiche e Standard
FID si basa su librerie crittografiche moderne ad alte prestazioni e standard W3C aperti per garantire la compatibilità con il Fediverse decentralizzato.
Algoritmi SEA di GunDB per crittografia ellittica e firme asimmetriche direttamente sul browser.
Derivazione sicura delle chiavi con 10,000 iterazioni eseguite nativamente tramite Web Crypto API.
Generazione di chiavi identità ActivityPub (PEM) veloci e resistenti agli attacchi side-channel.
Standard del W3C per lo scambio di messaggi e la scoperta degli attori decentralizzati nel social web.
Come Integrare FID nelle tue App Fediverso
Guida completa con snippet di codice per implementare il protocollo Single Sign-On (SSO), la derivazione deterministica delle chiavi ActivityPub (Ed25519) e il sistema di collegamento tra istanze (Instance Passports).
1. Single Sign-On (SSO) — Flusso "Login with FID"
L'utente autenticato sul portale autorizza la tua app. Il portale firma il token SSO e invia la chiave ActivityPub del dominio (apSeed) via POST all'istanza, restituendo all'app un codice monouso per completare la sessione senza esporre segreti nell'URL.
import { FidSsoHandler, createZenMasterKeySource, deriveApSeed, resolveRedirectUri } from 'fid';
// 1. Definisci i parametri dell'applicazione client
const clientId = 'my-fediverse-app';
const instanceDomain = 'sudorecords.scobrudot.dev';
const redirectUri = 'https://sudorecords.scobrudot.dev/api/auth/callback';
// 2. Valida l'URI di reindirizzamento prima dell'invio (HTTPS o loopback obbligatorio)
const target = resolveRedirectUri(redirectUri, instanceDomain);
if (!target) throw new Error('redirectUri non valido o non conforme a HTTPS');
// 3. Reindirizza l'utente al portale FID per il consenso SSO:
// https://fid-portal.vercel.app/sso.html?clientId=my-fediverse-app&redirectUri=...&instanceDomain=sudorecords.scobrudot.dev
// 4. Lato Client Portale: Emissione del token SSO e invio all'istanza (mode: "code")
const zenSource = createZenMasterKeySource(masterPrivKey, zenPubKey);
const ssoHandler = new FidSsoHandler('instance-shared-secret');
const ssoReq = ssoHandler.createSsoRequest(clientId, redirectUri, instanceDomain);
// Genera il token SSO firmato con la chiave master Zen SEA secp256k1
const ssoToken = await ssoHandler.issueSsoToken(ssoReq, username, zenSource);
// Deriva il seed 32-byte ActivityPub per QUESTO specifico dominio
const apSeedBytes = deriveApSeed(zenSource, instanceDomain, username);
const apSeedHex = Array.from(apSeedBytes).map(b => b.toString(16).padStart(2, '0')).join('');
// 5. Invia via POST all'endpoint dell'istanza per ottenere il codice monouso
const response = await fetch(`https://${instanceDomain}/api/auth/zen/sso`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ssoToken, apSeed: apSeedHex, mode: 'code' })
});
const { code } = await response.json();
// Reindirizza l'utente alla tua app con il codice monouso:
window.location.href = `${redirectUri}?fid_code=${code}`;