Autorités

Afin d’organiser une certaine intendance autour de la diffusion du code des applications, un certain nombre d’entités sont nécessaires.

Le modèle utilisé est assez classique est simple, la chaîne d’autorité est un schéma de parenté.

La structure du graphe reconnue est la suivant :

  • Le maître du tout (puppetmaster)
    • Les autorités de la sécurité
    • Les autorités du code
    • Les autorités du temps
    • Les autorités de l’annuaire

Les différentes entités autorités du projet nebule :

Chaque entité ici considérée doit être un objet entité EID (Entity ID) valide avec lien de type, un lien de nommage et un lien de localisation (URL web).

Références

Le puppetmaster est un RID qui peut être remplacé. Il va faire référence par des liens dédiés vers les différents d’autorités au moyen de RID dédiés :

  • Autorités de la sécurité
    • a4b210d4fb820a5b715509e501e36873eb9e27dca1dd591a98a5fc264fd2238adf4b489d.none.288
  • Autorités du code
    • 2b9dd679451eaca14a50e7a65352f959fc3ad55efc572dcd009c526bc01ab3fe304d8e69.none.288
  • Autorités du temps
    • bab7966fd5b483f9556ac34e4fac9f778d0014149f196236064931378785d81cae5e7a6e.none.288
  • Autorités de l’annuaire
    • 50e1d0348892e7b8a555301983bccdb8a07871843ed8f392d539d3d90f37ea8c2a54d72a.none.288

C’est à dire que tout EID désigné par un de ces RID (l>RID>EID), et signé par le puppetmaster, devient une autorité dans le groupe considéré.

Génération

La génération d’une nouvelle chaîne d’autorité se fait en deux étapes.

Génération des entités

Définir un mot de passe pour le puppetmaster.

Générer le puppetmaster :

openssl genrsa -aes256 -out puppetmaster.key.pem 4096
openssl rsa -in puppetmaster.develop.key.pem -outform PEM -pubout -out puppetmaster.develop.pub.pem

Définir les mots de passe pour les autres autorités.

Générer les autres autorités :

for I in security code time directory
do
  openssl genrsa -aes256 -out $I.authority.key.pem 1024
  openssl rsa -in $I.authority.key.pem -outform PEM -pubout -out $I.authority.pub.pem
done

Préparer les variables :

puppetmaster_key_hash=$(sha256sum puppetmaster.key.pem | cut -d' ' -f1)'.sha.256'
puppetmaster_pem_hash=$(sha256sum puppetmaster.pub.pem | cut -d' ' -f1)'.sha.256'
security_authority_key_hash=$(sha256sum security.authority.key.pem | cut -d' ' -f1)'.sha.256'
security_authority_pem_hash=$(sha256sum security.authority.pub.pem | cut -d' ' -f1)'.sha.256'
code_authority_key_hash=$(sha256sum code.authority.key.pem | cut -d' ' -f1)'.sha.256'
code_authority_pem_hash=$(sha256sum code.authority.pub.pem | cut -d' ' -f1)'.sha.256'
time_authority_key_hash=$(sha256sum time.authority.key.pem | cut -d' ' -f1)'.sha.256'
time_authority_pem_hash=$(sha256sum time.authority.pub.pem | cut -d' ' -f1)'.sha.256'
directory_authority_key_hash=$(sha256sum directory.authority.key.pem | cut -d' ' -f1)'.sha.256'
directory_authority_pem_hash=$(sha256sum directory.authority.pub.pem | cut -d' ' -f1)'.sha.256'

Écrire les objets :

mkdir o
cp puppetmaster.key.pem "o/$puppetmaster_key_hash"
cp puppetmaster.pub.pem "o/$puppetmaster_pem_hash"
cp security_authority.key.pem "o/$security_authority_key_hash"
cp security_authority.pub.pem "o/$security_authority_pem_hash"
cp code_authority.key.pem "o/$code_authority_key_hash"
cp code_authority.pub.pem "o/$code_authority_pem_hash"
cp time_authority.key.pem "o/$time_authority_key_hash"
cp time_authority.pub.pem "o/$time_authority_pem_hash"
cp directory_authority.key.pem "o/$directory_authority_key_hash"
cp directory_authority.pub.pem "o/$directory_authority_pem_hash"

Génération des liens

Préparer les variables :

mkdir l

function get_nid() {
echo -n $(echo -n "$1" \
| sha256sum \
| cut -d' ' -f1)'.sha2.256'
}

current_date='0>0'$(date "+%Y%m%d%H%M%S")
link_prefix='nebule:link/2:0'
nid_typmime=$(get_nid 'nebule/objet/type')
nid_name=$(get_nid 'nebule/objet/nom')
nid_rsa=$(get_nid 'application/x-pem-file')
nid_location=$(get_nid 'nebule/objet/entite/localisation')
rid_sec='a4b210d4fb820a5b715509e501e36873eb9e27dca1dd591a98a5fc264fd2238adf4b489d.none.288'
rid_cod='2b9dd679451eaca14a50e7a65352f959fc3ad55efc572dcd009c526bc01ab3fe304d8e69.none.288'
rid_tim='bab7966fd5b483f9556ac34e4fac9f778d0014149f196236064931378785d81cae5e7a6e.none.288'
rid_dir='50e1d0348892e7b8a555301983bccdb8a07871843ed8f392d539d3d90f37ea8c2a54d72a.none.288'
eid_pup=$puppetmaster_pem_hash
eid_sec=$security_authority_pem_hash
eid_cod=$code_authority_pem_hash
eid_tim=$time_authority_pem_hash
eid_dir=$directory_authority_pem_hash


function clink()
{
sign=$(echo -n "$1" \
| openssl dgst -hex -"sha$3" -sign "o/$2" \
| cut -d ' ' -f2)
link="$1_$2>$sign.sha2.$3"
nid1=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f2)
nid2=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f3)
nid3=$(echo "$1" | cut -d_ -f2 | cut -d/ -f2 | cut -d '>' -f4)
[ "$nid1" != '' ] && echo "$link" >> "l/$nid1"
[ "$nid2" != '' ] && echo "$link" >> "l/$nid2"
[ "$nid3" != '' ] && echo "$link" >> "l/$nid3"
}

Génération des liens :

clink "$link_prefix_$current_date/l>$eid_pup>nid_rsa>$nid_typemime" $eid_pup 512

...

Évolutions

Une évolution est en cours d’intégration avec la nouvelle version des liens. Si l’entité qui chapeaute toutes les autres est unique, chaque groupe d’autorités n’est plus seulement une entité mais devient un groupe d’entités à pouvoir identique.

Il est à prévoir que le maître du tout deviendra aussi, un jour, des autorités globales. Mais la forme n’est pas encore défini.

D’un point de vue sémantique, on quitte progressivement la notion de maître historique pour aller vers la notion d’autorité. Outre le rapport à l’esclavage, on est soumis au maître, on se soumet à l’autorité.


Laisser un commentaire