Sécurité
On prend ça très au sérieux.
Mastrmine pilote des ASIC à plusieurs milliers d'euros pièce. Voici en clair comment on protège tes mineurs, tes données et tes accès.
Architecture en 30 secondes
Mastrmine est composé de trois couches isolées :
- Le bridge tourne sur ton LAN. C'est lui qui parle aux ASIC (port 4028) et collecte hashrate, température, conso. Aucun port à ouvrir vers l'extérieur — il initie uniquement des connexions sortantes en HTTPS vers le cloud.
- Le cloud (Supabase à Frankfurt) reçoit les snapshots agrégés et les expose à l'app via une API authentifiée + RLS Postgres. Le cloud ne voit jamais l'IP locale de tes mineurs.
- L'app mobile s'authentifie via Supabase Auth (JWT) et n'accède qu'aux données filtrées par les politiques RLS — donc uniquement à ton organisation.
Ce qu'on stocke (et ce qu'on ne stocke pas)
✅ On stocke
- Email + hash bcrypt du mot de passe (Supabase Auth)
- Snapshots mineurs : hashrate, température, conso, état pool
- Configuration : seuils PMAX, cibles thermiques, alertes
- Audit log des actions invités (modif consigne, pause)
- Statut de paiement (sans détails carte)
❌ On ne stocke PAS
- Tes mots de passe en clair (jamais — bcrypt only)
- Le wallet BTC où tes mineurs envoient les rewards
- Tes credentials de pool (user/worker/password)
- Les IP locales de tes mineurs (le bridge les masque)
- Les détails de carte (Lemon Squeezy gère ça en V1.5)
Hébergement — RGPD-first
Toutes les données sont hébergées chez Supabase sur
leur région eu-central-1 à Frankfurt.
Aucun transfert hors UE pour le stockage.
Supabase est conforme SOC 2 Type II, RGPD, et utilise AWS Frankfurt comme infra sous-jacente. Les sauvegardes quotidiennes restent dans l'UE.
Les emails transactionnels passent par Resend (compatible RGPD, DPA signé). Les paiements USDT sont on-chain sur Tron — aucun intermédiaire ne stocke tes infos bancaires.
Isolation multi-tenant
L'organisation d'un opérateur n'est jamais visible par un autre opérateur. Cette garantie est faite au niveau Postgres via Row Level Security (RLS) — chaque requête vers la base est automatiquement filtrée par le JWT de l'utilisateur. Ce n'est pas une vérification applicative qu'on peut oublier ; c'est imposé par la base.
Quand un opérateur invite un viewer, le viewer ne voit que les mineurs de l'organisation dont il est membre — et uniquement les groupes/owners auxquels l'opérateur lui a donné accès. Les actions du viewer (modif consigne, pause) sont tracées dans un audit log immutable consultable par l'opérateur.
Bridge — secrets et open core
Le bridge est open-core : son code est public sur GitHub. Tu peux l'inspecter, le builder toi-même, ou le forker. Les binaires officiels sont compilés via GitHub Actions et publiés avec checksums SHA-256 vérifiables.
Au pairing, le bridge négocie un secret unique
avec le cloud (bridge_secret à entropie élevée).
Ce secret est stocké en clair dans
%ProgramData%\Mastrmine\Bridge\bridge.json sur Windows
ou /etc/mastrmine/bridge.json sur Linux — accès
restreint au compte SYSTEM/root.
Toute communication bridge ↔ cloud passe par TLS 1.3. Le secret n'est jamais transmis en clair après le pairing initial.
Conservation des données
- Snapshots mineurs : 7 jours (Free), 30 jours (Home), 1 an (Pro), illimité (Studio/Operator/Corporate).
- Audit log invités : 1 an minimum, supprimé sur demande.
- Comptes inactifs : avertissement à 6 mois, suppression à 12 mois.
- Suppression de compte : sous 30 jours sur simple email (info@mastrmine.app).
Tu as trouvé une faille ?
On accueille les rapports de sécurité responsable. Écris à info@mastrmine.app avec « Security disclosure » en sujet. On s'engage à :
- Accuser réception sous 24 h ouvrées
- Patcher les failles critiques sous 7 jours
- Te créditer publiquement (sauf demande contraire)
- Ne pas poursuivre judiciairement les chercheurs en bonne foi
Programme bug bounty officiel prévu post-lancement public (Q4 2026).