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).