Archive | Trop sérieux

Comment expliquer TLS à mes jeunes SIC pendant leurs « vacances » ?

1/ Méthode « gros con »

=> T’as pas appris ça à Cesson ?

2 / Méthode Charlie aka la pédagogie inductive

=> Demande à Google

3 / Méthode hacking

On récupère quelques morceaux de bonne facture et on demande à chatGPT / GenIAl d’en faire une version pour sergent/chef et on fait la démonstration IRL.

Et bien sur dès le début on commence par mettre à jour son Wireshark.

https://tls13.xargs.org/#client-key-exchange-generation

Posted in Crypto0 commentaire

PQSpy, une extension Firefox pour voir l’état PQC des pages visitées

Exemple sur le site Thales

Exemple sur le site Thales

Trouvé sur LinkedIn :

https://www.linkedin.com/posts/baswesterbaan_i-updated-pqspy-a-little-firefox-extension-share-7487861733542354945-cKFy/

I updated PQSpy, a little Firefox extension that shows you in a little icon whether the page you’re visiting is post-quantum encrypted ⚛️, or not ❌, or partially with a kind of pie chart.

Click the icon to get more the deets as shown in the screenshot.

Get the extension here: https://lnkd.in/dFFf2snR

Dev par Bas Westerbaan Post-quantum  expert at Cloudflare.

Comment ça marche ?

=> reniflage de x25519MLKEM768 dans le client/serverHello du TLS handshake

Mais ça sert vraiment à quelque chose ?

NON 😉

on peut faire la même chose directement depuis ses devTools

 

Posted in Crypto0 commentaire

Magnifique top 1k au FCSC 2026. Quelle aventure !

Un peu d'humilité ... et beaucoup d'auto-dérision

Un peu d’humilité … et beaucoup d’auto-dérision

C’était rigolo, j’avais oublié comment c’était stimulant les CTF.
Suis reparti de zéro. Soit à peine moins que le niveau que j’avais au meilleur de ma forme 😉
Mais j’avais vraiment envie de voir à quoi ressemblaient les challenges de crypto et web des années > 2025. Je n’ai pas été déçu.
Mais carrément à poil, même pas un simple Python qui trainait sur un vieux laptop, pas un netcat sur le Windows du boulot ni-même un compte Discord encore actif.
Et puis, tu remontes un environnement avec quelques outils basiques … et tu te reprends au jeu.
Mais tout est devenu si difficile … même le simple « Puissance 4 Baby ». Bon, je n’ai jamais été un furieux du pwn donc ça pique … moi, j’ai fait LSE avec Georges Poupineau en Seconde 2 informatique en 1985.
Bon aujourd’hui, si tu es nul en CTF classique, tu peux toujours te rabattre sur les CTF OSINT et fuir le regard condescendant des top flaggers 🙂

Bref, j’ai joué un peu … je me suis beaucoup lamenté sur mon niveau déplorable, je me suis fait discret, je n’ai pas fait appel à des amis en fait ((drame du high frequency flag Sharing), si … mais ils ne m’ont pas été de grand secours mais ça prouve bien combien le réseau est important dans cet écosystème. Et j’ai patiemment attendu les WU, aha !

Et entretemps testé quelques trucs de guedins qui n’existaient pas il y a 10 ans 🙂 (Parce que même les vieille recettes ne fonctionnent plus toujours … Lol mon install de Ghidra avec mon Java 17). Donc j’ai demandé à Google de me conseiller pour une décompil zen ligne et je suis tombé sur :

https://cloud.binary.ninja/

https://vexcited.com/blog/fcsc-2026/puissance-4-baby/

Posted in Clic, Crypto, Hack0 commentaire

En 2022, j’ai juste envie de faire du Splunk et de la PKI

Fenêtre sur le monde

Fenêtre sur le monde

Et ce sera déjà pas mal !

Mon projet : monter une PKI avec ejbca adossée à 3 openLDAP en multi-maître en backend (avec quelques clefs dans 2 HSM Atos Protecio en réplication. La-dessus, mettre en place un provider d’identité avec keycloack.

Voilà, y’a plus qu’à …

Bref un truc comme ce qu’on avait prévu à Ougadougou en 2016 😉 (avant qu’il ‘y ait le feu à l’Assemblée Nationale

Posted in Boulot, Clic, Crypto, Ecole0 commentaire

Public Key Cryptography Standards

base : https://en.wikipedia.org/wiki/PKCS / https://fr.wikipedia.org/wiki/Public_Key_Cryptographic_Standards

In cryptography, PKCS stands for « Public Key Cryptography Standards ». These are a group of public-key cryptography standards devised and published by RSA Security LLC, starting in the early 1990s. The company published the standards to promote the use of the cryptography techniques to which they had patents, such as the RSA algorithm, the Schnorr signature algorithm and several others. Though not industry standards (because the company retained control over them), some of the standards in recent years have begun to move into the « standards-track » processes of relevant standards organizations such as the IETF and the PKIX working-group.

Les PKCS (Public-Key Cryptography Standards), ou standards de cryptographie à clé publique, sont un ensemble de spécifications conçues par les laboratoires RSA en Californie. La société RSA Security est spécialisée dans les solutions de sécurité cryptographiques. Elle est également propriétaire de licences d’exploitations de plusieurs algorithmes (dont RSA avant l’expiration de son brevet le ). C’est pour ces raisons que la société a développé et promu les PKCS, permettant l’implantation des techniques de cryptographie à clé publique.

La société RSA Security n’est pas un organisme de normalisation, et pourtant, elle contrôle complètement l’élaboration et l’évolution des PKCS. L’appellation des PKCS comme standards au sens strict est donc abusive. Répondant à un réel besoin technique, les PKCS ont néanmoins été très largement adoptés par le milieu informatique. Le groupe de travail PKIX de l’IETF a depuis reformulé certains des PKCS dans des RFC, les standards Internet. L’abus de langage confondant le PKCS au lieu de la RFC correspondante est très répandu.

1- revenir sur la place de la cryprographie dans dans le cadre plus large de la cryptologie.

2- flash back sur l’histoire de l’entreprise RSA (https://fr.wikipedia.org/wiki/RSA_Security) ( y compris le leak de 2011)

3- faire une lecture croisée de ressources francophones et internationales

RSA Security

RSA Security

 

Version Nom Commentaires
PKCS#1 2.1 Standard de cryptographie RSA RFC 34471. Définit le chiffrement et la signature RSA (notamment les schémas de remplissage OAEP, PSS et PKCS1-v1.5).
PKCS#2 Obsolète Décrivait le chiffrement RSA de condensés de message, mais a été intégré dans PKCS#1.
PKCS#3 1.4 Standard d’échange de clés Diffie-Hellman
PKCS#4 Obsolète Décrivait la syntaxe de clé RSA, mais a été intégré dans PKCS#1.
PKCS#5 2.0 Standard de chiffrement par mot de passe cf. RFC 28982 (rendu obsolète par la RFC 80183) et PBKDF2.
PKCS#6 1.5 Obsolète Définissait les extensions de l’ancienne spécification de certificat X.509 v1.
PKCS#7 1.5 Standard de syntaxe de message cryptographique Cf. RFC 23154. Utilisé pour signer et/ou chiffrer des messages dans le cadre d’une infrastructure à clés publiques. Sert également à la transmission de certificats (notamment en réponse à un message PKCS#10). À l’origine de S/MIME, qui est désormais décrit sous le nom Cryptographic Message Syntax (CMS) dans la RFC 56525.
PKCS#8 1.2 Standard de syntaxe d’information de clé privée Cf. RFC 59586.
PKCS#9 2.0 Types d’attributs sélectionnés RFC 29857
PKCS#10 1.7 Standard de requête de certificat Cf. RFC 29868. Format des messages envoyés à une autorité de certification et demandant la signature d’une paire de clés.
PKCS#11 2.20 Interface de périphérique cryptographique (cryptoki) Une API définissant une interface générique pour périphérique cryptographique.
PKCS#12 1.0 Standard de syntaxe d’information personnelle Définit un format de fichier généralement utilisé pour stocker la clé privée et le certificat de clé publique correspondant en les protégeant par un mot de passe.
PKCS#13 Standard de Cryptographie sur les courbes elliptiques (En cours de développement)
PKCS#14 Générateur de nombres pseudo-aléatoires (En cours de développement)
PKCS#15 1.1 Standard de format d’information sur les périphériques cryptographiques Définit un standard permettant aux utilisateurs de périphériques cryptographiques de s’identifier auprès des applications, indépendamment de l’implantation de la cryptoki par l’application (PKCS #11) ou une autre API. La partie de cette spécification concernant les cartes IC a été intégrée dans le standard ISO/IEC 7816-15. [1] [archive]

#PKCS1 se prête très bien à l’illustration d’un des « standards »

Posted in Boulot, PKI, ICP, IGC0 commentaire

Zerologon (CVE-2020-1472) et Splunk

Plutôt que de lire des bêtises sur Silicon.fr et son code fantaisiste 4272, jetez plutôt un œil sur l’article de blog de Secura : Instantly Become Domain Admin by Subverting Netlogon Cryptography ou téléchargez le rapport Zerologon by Secura

Zerologon by secura

Zerologon by secura

Autres sources d’inspiration:

la base : le site de l’ANSSI qui explique :

Il est possible, dans certaines conditions, de détecter une tentative d’exploitation qui aurait pu subvenir avant application du correctif de Microsoft, grâce aux journaux générés par Windows.

Pour cela, la politique d’audit « Gestion du compte > Auditer la gestion des comptes d’ordinateur » [2] doit être activée sur les contrôleurs de domaine. Les événements « Un compte d’ordinateur a été modifié », dont l’identifiant est 4742, sont ainsi générés dans le journal de sécurité.

De tels événements sont générés de manière légitime lorsqu’un compte d’ordinateur renouvelle son mot de passe. Néanmoins, l’attaque Zerologon conduit aux spécificités suivantes :

le champ SubjectUserName est « ANONYMOUS LOGON » ;
le champ TargetUserName est le compte machine d’un contrôleur de domaine.

Zerologon Detection (CVE-2020-1472) qui propose la règle suivante : Primary Search for Local Domain Controller Exploitation by Zerologon

index= »<windows_index> » (sourcetype= »<windows_sourcetype_security> » OR source= »windows_source_security ») EventCode= »4742″ OR EventCode= »4624″ AND (src_user= »*anonymous* » OR member_id= »*S-1-0* »)
`comment(« This looks for all 4624 and 4742 events under an ‘ANONYMOUS USER’, which are tied to the exploitation of Zerologon »)`
| eval local_system=mvindex(upper(split(user, »$ »)),0)
`comment(« This effectively splits the user field, which when parsed with the TA for Windows, may also appear as the Target User. Since the exploit would specifically occur using a local account on the Domain Controller, it stands to reason that detecting a modified user object, modified by a local system account, would be evidence of the exploit. The split removes the ‘$’, creating a new field, deriving the local_system name via the original user field [ie. user=’NameOfDC$’ would become local_system=’NameofDC’] »)`
| search host=local_system
`comment(« A search to only find instances of these events when the host (DC) is the same as the extracted local_system account name performing the action »)`
| table _time EventCode dest host ComputerName src_user Account_Name local_system user Security_ID member_id src_nt_domain dest_nt_domain


Ressources complémentaires :

ZeroLogon testing script

A Python script that uses the Impacket library to test vulnerability for the Zerologon exploit (CVE-2020-1472).

It attempts to perform the Netlogon authentication bypass. The script will immediately terminate when successfully performing the bypass, and not perform any Netlogon operations. When a domain controller is patched, the detection script will give up after sending 2000 pairs of RPC calls and conclude the target is not vulnerable (with a false negative chance of 0.04%).

 

Posted in CyberDefense0 commentaire

OpenShift Issue

OpenShift Playground

OpenShift Playground

Sad, no beeing able to assess OpenShift Playground 🙁

 

 

 

 

2 months later 🙁

openshift's answer 2021

openshift’s answer 2021 – Playground is dead

Posted in Boulot, Clic, Trop sérieux2 Comments

Protégé : RSA public key : Behind the scene

Ce contenu est protégé par un mot de passe. Pour le voir, veuillez saisir votre mot de passe ci-dessous :

Posted in Boulot, CryptoSaisissez votre mot de passe pour accéder aux commentaires.

L’arme est d’Euler

A ceux qui auraient tendance à voir une référence à autre choses (20 % d’armée + 80 % d’air, par exemple) : Passez votre chemin !

En mathématiques, l’indicatrice d’Euler est une fonction de la théorie des nombres.

Elle intervient en mathématiques pures, à la fois en théorie des groupes, en théorie algébrique des nombres et en théorie analytique des nombres.

En mathématiques appliquées, à travers l’arithmétique modulaire, elle joue un rôle important en théorie de l’information et plus particulièrement en cryptologie.

La fonction indicatrice est aussi appelée fonction phi d’Euler ou simplement la fonction phi, car la lettre φ est communément utilisée pour la désigner.

Elle est nommée en l’honneur du mathématicien suisse Leonhard Euler (17071783) qui fut le premier à l’étudier.

Sommaire

  Définition et calcul explicite

  Définition et exemple

Plus formellement :

\begin{array}{ccccl}\varphi&:&\N^*&\longrightarrow&\N^*\\&&n&\longmapsto&\mathrm{card}(\{m\in\N^*~|~m\le n~\text{et}~m\text{ premier avec }n\}).\end{array}

Par exemple :

  • φ(8) = 4 car parmi les nombres de 1 à 8, seuls les quatre nombres 1, 3, 5 et 7 sont premiers avec 8,
  • φ(1) = 1 car 1 est premier avec lui-même (c’est le seul entier naturel qui vérifie cette propriété, si bien que, pour tout entier n > 1, on peut remplacer m ≤ n par m < n dans la définition ci-dessus de φ(n)).
  • φ(2) = 1.

  Premières propriétés

Articles détaillés : Groupe cyclique et Anneau Z/nZ.

Dans ce paragraphe, n désigne un entier strictement positif.

Cette propriété est démontrée dans le paragraphe Structure additive de l’article Anneau Z/nZ.

Cette propriété est démontrée dans le paragraphe Groupe des unités de l’article Anneau Z/nZ.

  • Si u et v sont deux entiers strictement positifs et premiers entre eux, alors φ(u.v)=φ(u).φ(v).

Une telle fonction est dite multiplicative. On peut démontrer cette propriété à partir du théorème des restes chinois pour les groupes, selon lequel le groupe cyclique (Z/(uv)Z,+) est isomorphe au produit (Z/uZ)×(Z/vZ). Un couple (x,y) de ce groupe produit est générateur si et seulement si x est générateur de Z/uZ et y est générateur de Z/vZ. Le nombre d’éléments générateurs du groupe produit est donc égal à φ(u).φ(v). L’isomorphisme montre que cette valeur est égale au nombre d’éléments générateurs du groupe Z/(uv)Z, ce qui démontre la formule recherchée.

  Calcul

La valeur de l’indicatrice d’Euler s’obtient par l’expression de n donnée par le théorème fondamental de l’arithmétique :

\mathrm{Si}\quad n=\prod_{i=1}^q p_i^{k_i}\quad \mathrm{alors} \quad \varphi (n)=\prod_{i=1}^q (p_i-1) p_i^{k_i-1} = n \prod_{i=1}^q {\left( 1- \frac{1}{p_i} \right) }
Dans la formule, pi désigne un nombre premier et ki un entier strictement positif.

En effet, le caractère multiplicatif de l’indicatrice d’Euler et une récurrence montrent que :

\varphi(n) = \prod_{i=1}^q \varphi(p_i^{k_i})
Il suffit alors de dénombrer le nombre d’entiers non premiers avec une puissance d’un nombre premier et plus petit que celui-ci pour remarquer que :

\forall i \in [1, q] \quad \varphi(p_i^{k_i})= p_i^{k_i} - p_i^{k_i - 1}=(p_i-1).p_i^{k_i-1}
Ce qui permet de conclure la démonstration.

  Autres propriétés

  Arithmétique modulaire

L’indicatrice d’Euler est une fonction essentielle de l’arithmétique modulaire, elle est à la base de résultats fondamentaux, à la fois en mathématiques pures et appliquées.

Cette propriété est une conséquence directe du calcul explicite de l’indicatrice.

La cryptologie utilise largement cette fonction. Le code RSA se fonde sur le théorème d’Euler, indiquant que si n est un entier strictement positif et a un entier premier avec n, alors aφ(n) ≡ 1 (mod n).

Une autre branche de la théorie de l’information utilise l’indicatrice : la théorie des codes. C’est les cas des codes correcteurs, et particulièrement des codes cycliques. Ce type de code se construit à l’aide de polynôme cyclotomique et le degré du polynôme cyclotomique Φn d’indice n à coefficients dans les entiers est égal à φ(n). Plus précisément, on dispose des égalités suivantes :

X^n-1 \ = \ \prod_{d\mid n} \Phi_d (X) \quad \mathrm{et} \ \mathrm{donc} \quad \sum_{d\mid n}\varphi(d)=n
La somme et le produit sont étendus à tous les diviseurs positifs d de n.

La formule d’inversion de Möbius permet d’inverser cette somme :

\varphi(n)=\sum_{d\mid n} d \mu(n/d)
Ici, μ désigne la fonction de Möbius usuelle définie sur l’ensemble des entiers strictement positifs, la démonstration est proposée dans l’article associé.

  Théorie analytique des nombres

Les deux fonctions génératices présentées ici sont des conséquences directes du fait que :

\sum_{d|n} \varphi(d) = n.

Une série de Dirichlet utilisant \varphi(n) est

\sum_{n=1}^{\infty} \frac{\varphi(n)}{n^s}=\frac{\zeta(s-1)}{\zeta(s)}.

qui est dérivé depuis :

 \zeta(s) \sum_{n=1}^\infty \frac{\varphi(n)}{n^s} = \sum_{n=1}^\infty \left(\sum_{d|n} \varphi(d)\right) \frac{1}{n^s} = \sum_{n=1}^\infty \frac{n}{n^s} = \zeta(s-1),

ou \zeta(s) est la fonction zêta de Riemann.

Une série de Lambert utilisant \varphi(n) est

\sum_{n=1}^{\infty} \frac{\varphi(n) q^n}{1-q^n}= \frac{q}{(1-q)^2}

qui converge pour |q|<1.

dérivé de :

\sum_{n=1}^{\infty} \frac{\varphi(n) q^n}{1-q^n} = \sum_{n=1}^{\infty} \varphi(n) \sum_{r\ge 1} q^{rn}

avec

 \sum_{k\ge 1} q^k \sum_{n|k} \varphi(n) = \sum_{k\ge 1} k q^k = \frac{q}{(1-q)^2}.

  Croissance de la fonction

La croissance de \varphi(n) comme une fonction de n est une question intéressante. La première impression que l’on a pour les petits n est que \varphi(n) doit être notablement plus petit que n, ce qui est quelque peu erroné. Asymptotiquement, nous avons

n^{1 - \epsilon} < \varphi(n) < n\,

pour n’importe quel \epsilon > 0\, et n > N(\epsilon)\, . En fait, si nous considérons

\frac {\varphi(n)}{n}\,

nous pouvons écrire, à partir de la formule précédente, sous forme de produit de facteurs

1 - p^{-1}\,

où les p sont des nombres premiers divisant n. Par conséquent les valeurs de n correspondantes aux valeurs particulièrement petites du rapport sont les n qui sont le produit d’un segment initial de la suite de tous les nombres premiers. À partir du théorème des nombres premiers il peut être montré qu’une constante ε dans la formule précédente peut par conséquent être remplacée par

C \frac{\log\log {n}}{{\log n}}\, .

  Les 99 premières valeurs de la fonction φ

  Les 100 premières valeurs de la fonction φ
\varphi(n) +0 +1 +2 +3 +4 +5 +6 +7 +8 +9
0+ 1 1 2 2 4 2 6 4 6
10+ 4 10 4 12 6 8 8 16 6 18
20+ 8 12 10 22 8 20 12 18 12 28
30+ 8 30 16 20 16 24 12 36 18 24
40+ 16 40 12 42 20 24 22 46 16 42
50+ 20 32 24 52 18 40 24 36 28 58
60+ 16 60 30 36 32 48 20 66 32 44
70+ 24 70 24 72 36 40 36 60 24 78
80+ 32 54 40 82 24 64 42 56 40 88
90+ 24 72 44 60 46 72 32 96 42 60

On observe que, excepté pour n = 1 ou 2, \varphi(n) est pair, propriété qui est générale. En effet, en notant  n=2^k \prod_{i=1}^q p_i^{k_i} avec les p_i impairs et q éventuellement nul (produit vide), on a :

 \varphi (n)=2^{k - 1} \prod_{i=1}^q (p_i-1) p_i^{k_i-1}
Or si n > 2, alors k > 1 ou q > 0. Dans un cas comme dans l’autre, on obtient bien que \varphi(n) est pair.

  Autres formules impliquant la fonction φ d’Euler

\;\varphi(n^m) = n^{m-1}\varphi(n) pour m\ge 1
\sum_{d \mid n} \frac{\mu^2(d)}{\varphi(d)} = \frac{n}{\varphi(n)}
\sum_{1\le k\le n \atop (k,n)=1}\!\!k = \frac{1}{2}n\varphi(n) pour \;n>1
\sum_{k=1}^n\varphi(k) = \frac{1}{2}\left(1+ \sum_{k=1}^n \mu(k)\left\lfloor\frac{n}{k}\right\rfloor^2\right)
\sum_{k=1}^n\frac{\varphi(k)}{k} = \sum_{k=1}^n\frac{\mu(k)}{k}\left\lfloor\frac{n}{k}\right\rfloor
\sum_{k=1}^n\frac{k}{\varphi(k)} = \mathcal{O}(n)
\sum_{k=1}^n\frac{1}{\varphi(k)} = \mathcal{O}(\log(n))

  Inégalités

Certaines inégalités impliquant la fonction \varphi(n) sont :

 \varphi(n) > \frac {n} {e^\gamma\; \log \log n + \frac {3} {\log \log n}} pour n > 2, où \gamma\, est la constante d’Euler,
 \varphi(n) \ge \sqrt{\frac {n} {2} } pour n > 0,

et

 \varphi(n) \ge \sqrt{n} pour n > 6.

Pour un nombre premier n, clairement \varphi(n) = n-1\,. Pour un nombre composé n, nous avons

 \varphi(n) \le n-\sqrt{n}

Pour tous les n>1  :

0<\frac{\varphi(n)}{n}<1

Pour un grand n aléatoire, ces bornes ne peuvent pas être encore améliorées, en effet :

\liminf \frac{\varphi(n)}{n}=0 \mbox{ et } \limsup \frac{\varphi(n)}{n}=1.

Une paire d’inégalités combinant la fonction \varphi et la fonction diviseur \sigma sont :

 \frac {6 n^2}{\pi^2} < \varphi(n) \sigma(n) < n^2 \mbox{ pour } n>1.

  Conjectures

  Voir aussi

© Copyright auteur(s) de Wikipédia – Cet article est sous licence CC BY-SA 3.0

Posted in Crypto0 commentaire

Mais pourquoi ma clé commence toujours par MIGf… ?

Read that f… RFC 1421 : Privacy Enhancement for Internet Electronic Mail

and follow those precious links :

https://lapo.it/asn1js
https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-encoded-length-and-value-bytes
http://javadoc.iaik.tugraz.at/iaik_jce/current/iaik/x509/PublicKeyInfo.html
https://medium.com/@bn121rajesh/understanding-rsa-public-key-70d900b1033c

# Generate 1024 bit Private key
$ openssl genrsa -out myprivate.pem 1024
# Separate the public part from the Private key file.
$ openssl rsa -in myprivate.pem -pubout > mypublic.pem
# Display the contents of private key
$ cat myprivate.pem

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDRFNU++93aEvz3cV8LSUP9ib3iUxT7SufdVXcgVFK9M3BYzvro
A1uO/parFOJABTkNhTPPP/6mjrU2CPEZJ1zIkpaSNJrrhpp/rNMO9nyLYPGs9Mfd
BiWUPmHW5mY1oD0ye4my0tEsHOlgHC8AhA8OtiHr6IY0agXmH/y5YmSWbwIDAQAB
AoGAAj/IH3pUI6FqqTrF+/gYzCRsL4AXTLC8l8vwkR93GGPyRHJNjqtik8I3WrXJ
zUiBGZ0iNouIsL/+QQuNlGiw/c5i2X3nTntREDS9xs2M0x+MWD/5qI1sn0Qk0HNP
BbDczlvO8wXNFGIHiTiPVEawoeNwhMqJDyGcbsEOZp2pLokCQQDvlMBU6dOeOP9a
jnENFSlrvzNR0nugFeoGmfq6s4Czz2QtUd9baKqBfEBSdJskwFVHgxbFA1Dc7iFu
rJkoQEeFAkEA32j9ibSVryxLvWUZngKNwo2xE+wcYDAYVBMsYC3OBU3FXhVkFD06
ZVnJsY/4bd2VdQI+bI2KV99aHutMJG2WYwJABMn2ZjweTMVa5VZ/kAFiSJMT1Yjd
i7+kY+lkB6Na6T02BWnjixI2hkwThRJrn3pwufM2201Lqn7gEDRHA3T1eQJBAKZG
1RUNo6558HEo8vUIf4vCu33RaJkqkqDYmFmJHeISrQfGMfNiUrkmJ5iRR9w1ZExu
/Bj9C281XDTQ+Z3PNnMCQQCan+pvj0OZH6o0PAMJGBBwRECPpfZ6mUjwA2YD3g61
MHjtIYmKKGmn64Qs8zQ4mNEDboQqyaov3Ij/I6c0ZQlc
-----END RSA PRIVATE KEY-----

Privacy Enhanced Mail (PEM)

Privacy Enhanced Mail (PEM) is a Base64 encoded Distinguished Encoding Rules(DER)
PEM file is human readable as it uses 64 printable characters for encoding.
It is easy to share PEM file.

 

Display the contents of public key PEM file

# Display the contents of public key PEM file
$ cat mypublic.pem

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRFNU++93aEvz3cV8LSUP9ib3i
UxT7SufdVXcgVFK9M3BYzvroA1uO/parFOJABTkNhTPPP/6mjrU2CPEZJ1zIkpaS
NJrrhpp/rNMO9nyLYPGs9MfdBiWUPmHW5mY1oD0ye4my0tEsHOlgHC8AhA8OtiHr
6IY0agXmH/y5YmSWbwIDAQAB
-----END PUBLIC KEY-----

 

Distinguished Encoding Rules (DER) format of public key

DER is encoded in Type-Length-Value (TLV) format.
DER is in binary format for PEM file and follows certain structure for public key.

# Convert PEM file to DER format using openssl rsa
$ openssl rsa -pubin -inform PEM -in mypublic.pem -outform DER -out mypublic.der
# Dump the DER file in hex format.
$ xxd -g 1 -u mypublic.der | cut -c -57
00000000: 30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01
00000010: 05 00 03 81 8D 00 30 81 89 02 81 81 00 D1 14 D5
00000020: 3E FB DD DA 12 FC F7 71 5F 0B 49 43 FD 89 BD E2
00000030: 53 14 FB 4A E7 DD 55 77 20 54 52 BD 33 70 58 CE
00000040: FA E8 03 5B 8E FE 96 AB 14 E2 40 05 39 0D 85 33
00000050: CF 3F FE A6 8E B5 36 08 F1 19 27 5C C8 92 96 92
00000060: 34 9A EB 86 9A 7F AC D3 0E F6 7C 8B 60 F1 AC F4
00000070: C7 DD 06 25 94 3E 61 D6 E6 66 35 A0 3D 32 7B 89
00000080: B2 D2 D1 2C 1C E9 60 1C 2F 00 84 0F 0E B6 21 EB
00000090: E8 86 34 6A 05 E6 1F FC B9 62 64 96 6F 02 03 01
000000a0: 00 01

 

Structured DER file content

1:30 81 9F // Type: 30 (SEQUENCE) Length: 0x9F
2:| 30 0D // Type: 30 (SEQUENCE) Length: 0x0D
3:| | 06 09 // Type: 06 (OBJECT_IDENTIFIER) Length: 0x09
4:| | - 2A 86 48 // 9 bytes OID value. HEX encoding of
5:| | - 86 F7 0D // 1.2.840.113549.1.1.1
6:| | - 01 01 01
7:| | 05 00 // Type: 05 (NULL) Length: 0x00
8:| 03 81 8D // Type: 03 (BIT STRING) Length: 0x8D
9:| | - 00 // Number of unused bits in last content byte
10:| | 30 81 89 // Type: 30 (SEQUENCE) Length: 0x89
11:| | | 02 81 81 // Type: 02 (INTEGER) Length: 0x81
12:| | | - 00 // Leading ZERO of integer
13:| | | - D1 14 D5 3E FB DD DA 12 FC F7 71 5F 0B 49 43 FD
14:| | | - 89 BD E2 53 14 FB 4A E7 DD 55 77 20 54 52 BD 33
15:| | | - 70 58 CE FA E8 03 5B 8E FE 96 AB 14 E2 40 05 39
16:| | | - 0D 85 33 CF 3F FE A6 8E B5 36 08 F1 19 27 5C C8
17:| | | - 92 96 92 34 9A EB 86 9A 7F AC D3 0E F6 7C 8B 60
18:| | | - F1 AC F4 C7 DD 06 25 94 3E 61 D6 E6 66 35 A0 3D
19:| | | - 32 7B 89 B2 D2 D1 2C 1C E9 60 1C 2F 00 84 0F 0E
20:| | | - B6 21 EB E8 86 34 6A 05 E6 1F FC B9 62 64 96 6F
21:| | | 02 03 // Type: 02 (INTEGER) Length: 0x3
22:| | | - 01 00 01 // Public Exponent. Hex for 65537

 

DER file contains Object Identifier, Modulus and Public exponent in HEX format.

Lines 4, 5, 6 is the HEX encoding of OID.
Lines 13 to 20 is the modulus (n).
Line 22 is the public exponent.

You can also have a look at Lapo ASN.1 javascript decoder :

Javascript ASN.1 decoder

Javascript ASN.1 decoder

Modulus and Public exponent from public key using openssl

# Get Modulus and Public exponent from public PEM file
$ openssl rsa -pubin -inform PEM -text -noout < mypublic.pem

Public-Key: (1024 bit)
Modulus:
00:d1:14:d5:3e:fb:dd:da:12:fc:f7:71:5f:0b:49:
43:fd:89:bd:e2:53:14:fb:4a:e7:dd:55:77:20:54:
52:bd:33:70:58:ce:fa:e8:03:5b:8e:fe:96:ab:14:
e2:40:05:39:0d:85:33:cf:3f:fe:a6:8e:b5:36:08:
f1:19:27:5c:c8:92:96:92:34:9a:eb:86:9a:7f:ac:
d3:0e:f6:7c:8b:60:f1:ac:f4:c7:dd:06:25:94:3e:
61:d6:e6:66:35:a0:3d:32:7b:89:b2:d2:d1:2c:1c:
e9:60:1c:2f:00:84:0f:0e:b6:21:eb:e8:86:34:6a:
05:e6:1f:fc:b9:62:64:96:6f
Exponent: 65537 (0x10001)

Exponent and modulus printed by openssl rsa matches with the Public exponent and modulus from DER file content.

More information on recommended syntax for interchanging RSA public keys between implementations is given in Appendix A.1.1 of rfc3447 ( PKCS#1);

RSA key representation

RSA key representation

 

Object Identifier

OID describes the object. It is a series of nodes separated by period.

OID Value: 1.2.840.113549.1.1.1

OID description: Identifier for RSA encryption for use with Public Key Cryptosystem One defined by RSA Inc.

OID Encoding rules:

1 – The first two nodes of the OID are encoded onto a single byte. The first node is multiplied by the decimal 40 and the result is added to the value of the second node.
2 – Node values less than or equal to 127 are encoded on one byte.
3 – Node values greater than or equal to 128 are encoded on multiple bytes. Bit 7 of all bytes except the rightmost byte is set to one. Bits 0 through 6 of each byte contains the encoded value.

OID Encoding Example © Rajesh Bondugula

OID Encoding Example © Rajesh Bondugula

 

Representing length in ASN.1 encoding

If number of value bytes is < 128 (0x80) then length is represented in 1 byte. In this case most significant bit is 0. (Ex: Line 2: 0x81=10000001 => 1 octet, Line 3 in structured DER content above)

If number of value bytes is >= 128 (0x80) then length is represented in multiple bytes. Most significant bit (bit 7) of first byte is 1 indicating multiple byte length. Bits 0–6 represent number of subsequent bytes for length. (Ex:  Line 1: 0x82=10000010 => 2 octets, Line 4 in structured DER content above)

 

References

DER encoding of ASN.1 types (MSDN)
Public Key Info structure (Java doc)

 

[ajout de août 2021 suite plaintes]

– Mais du coup … tu n’as pas répondu  la question ?
[lm] C’est pas faux, mais si tu révises le fonctionnement de l’encodage base 64, à partir d’un contenu DER qui commence toujours par la même syntaxe:

xxd -r -p <<<30819F | base64
MIGf

 

Posted in Crypto, PKI, ICP, IGC1 Commentaire