Lire le document du développeur sur Signature du code Il est indiqué à l'article Digital Signatures and Signed Code
:
Pour créer une signature numérique, la fonction type spécial de somme de contrôle appelé hachage (ou condensé) basé sur un morceau de données ou de code et sur un morceau de données ou de code. de données ou de code et crypte ce hachage avec la clé privée du signataire. Cette chiffré est appelé signature.
Pour vérifier cette signature, le logiciel de vérification calcule un hachage de des données ou du code. Il utilise ensuite la clé publique du signataire pour décrypter la signature, obtenant ainsi le hachage original tel qu'il a été calculé par le signataire. Si les deux hachages correspondent, les données n'ont pas été modifiées depuis qu'elles ont été signé par une personne en possession de la clé privée du signataire.
Le code signé contient plusieurs signatures numériques :
- Si le code est universel, l'obje (architecture) est signé séparément. Cette signature est stockée dans le fichier binaire lui-même.
- Différents composants de l'applica (comme le fichier Info.plist, le cas échéant) sont également signés. Ces signatures sont stockées dans un fichier appelé _CodeSignature/CodeResources dans le paquet.
Après quelques manipulations, je sais ce qui suit :
- À l'intérieur du binaire, j'ai obtenu le code
CodeDirectory
(0xfade0c02
) contenant tous les hachages SHA-1 ou les sommes de contrôle de l'offre groupée, par exempleInfo.plist
etc. - À l'intérieur de la liasse, j'ai reçu
_CodeSignature
avec le répertoireCodeResources
qui, comme le mentionne le paragraphe cité ci-dessus, doit contenir toutes les signatures. Cependant, leCodeResources
ne contient que des hachages SHA-1 codés en base64 de plusieurs fichiers. - À l'intérieur du binaire, j'ai quelques certificats, que je peux extraire à l'aide de la fonction
codesign -d --extract-certificates <binary>
- générantcodesign0
,codesign1
etc. Ces certificats sont en faitCMS Signatures
(0xfade0b01
) qui contiennent des signatures de certificats. La recherche deCMS
J'obtiens Syntaxe des messages cryptographiques qui est utilisé pour signer les données.
Le paragraphe m'indique maintenant qu'un hachage doit être stocké sous forme de signature (hachage crypté) dans le fichier binaire ou dans le fichier CodeResources
fichier.
Je soupçonne que codesign
utilise l'un des certificats/ CMS Signatures
pour extraire la clé publique, puis déchiffre une signature (hachage chiffré) et compare le résultat au hachage original d'un fichier donné, par exemple Info.plist
.
Ma question est donc la suivante : où se trouve cette signature (hachage crypté) ? S'agit-il de la signature à l'intérieur d'un certificat/ CMS Signature
? Ou est-ce ailleurs ?