feat(licence): lier la licence au poste (carte mere + disque)
C'etait la decision prise, et je l'avais mal lue : "pour le moment 1" repondait a la question 1, pas "une seule licence". PM.MachineId melange l'UUID de la carte mere (WMI) et la serie du volume systeme, puis n'en publie que 16 hexa : l'empreinte se recopie dans un courriel, l'UUID brut n'a pas a circuler. Un UUID nul ou tout a FF est rejete — VM et images clonees l'annoncent, et deux postes tomberaient alors sur la meme empreinte. Le champ m est compare APRES la signature. m absent = licence flottante, acceptee : seule la cle privee peut en emettre, et le champ ne peut pas etre retire sans casser la signature. Cote script -Machine est obligatoire sauf -Floating explicite. L'ecran d'activation affiche l'Installation ID : une licence liee ne peut plus etre emise avant l'installation. Verifie sur ce poste : liee a lui acceptee, liee a un autre refusee, flottante acceptee. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -280,6 +280,37 @@ tools\licence.ps1 -For "a@b.com" -Name "Ami" # une licence
|
||||
- **Pas d'expiration dans la charge utile**, volontairement : une date qu'on
|
||||
fait respecter avec l'horloge de la machine du client ne prouve rien. Le
|
||||
champ `d` n'est qu'une date d'emission.
|
||||
|
||||
### Liage au poste (`PM.MachineId`)
|
||||
|
||||
Le champ `m` de la charge utile porte l'empreinte du poste ; `MachineMatches`
|
||||
la compare **apres** la verification de signature — une empreinte n'a de sens
|
||||
que dans une charge utile dont on sait deja qu'elle vient de nous.
|
||||
|
||||
- Empreinte = `SHA256('pmserver/machine/v1|' + UUID carte mere + '|' + serie du
|
||||
volume systeme)`, tronquee a 16 hexa, affichee en groupes de quatre
|
||||
(`CD6F-F1B3-25C4-0111`). **Hachee, pas concatenee** : elle se recopie dans un
|
||||
courriel, et l'UUID brut de la carte mere est un identifiant materiel unique
|
||||
qui n'a pas a circuler en clair ni a finir dans nos journaux.
|
||||
- UUID lu par WMI (`Win32_ComputerSystemProduct`, COM via `Winapi.ActiveX` pour
|
||||
`IEnumVariant`). **Un UUID nul ou tout a FF est rejete** : beaucoup de VM et
|
||||
d'images clonees l'annoncent, et s'en contenter ferait tomber des postes
|
||||
differents sur la MEME empreinte — une licence emise pour l'un ouvrirait chez
|
||||
l'autre. Repli sur `MachineGuid` (HKLM\...\Cryptography), distinct par
|
||||
installation. Les deux sources absentes → `'unavailable'`, qui ne correspond a
|
||||
aucune licence : mieux qu'une chaine vide, identique partout.
|
||||
- Calculee une fois puis retenue (l'appel WMI coute quelques centaines de ms).
|
||||
- **`m` absent = licence flottante, acceptee** — seule la cle privee peut en
|
||||
emettre une, et un tiers ne peut pas retirer le champ sans casser la
|
||||
signature. Ce n'est donc pas un contournement, c'est une licence de site.
|
||||
Cote script, `-Machine` est **obligatoire** sauf `-Floating` explicite :
|
||||
l'oubli produirait sinon la licence la plus permissive en silence.
|
||||
- **Consequence de flux** : on ne peut plus emettre une licence avant que le
|
||||
client ait installe. L'ecran d'activation affiche l'Installation ID, il
|
||||
l'envoie, on emet. Changer la carte mere ou le disque systeme casse la
|
||||
licence — la reparation est une reemission.
|
||||
- Ce qui casse l'empreinte : carte mere remplacee, disque systeme remplace,
|
||||
Windows reinstalle sur un autre volume, machine clonee.
|
||||
- `SelfTestLicence` a l'`initialization` (comme `SelfTestCrypto`) rejoue un
|
||||
vecteur fige signe par une **paire de test** dont la privee a ete jetee :
|
||||
licence valable acceptee, un octet retourne dans la charge utile refuse.
|
||||
|
||||
Reference in New Issue
Block a user