2 votes

Signature du code : Où se trouve le "hachage crypté" d'un blob signé ?

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 exemple Info.plist etc.
  • À l'intérieur de la liasse, j'ai reçu _CodeSignature avec le répertoire CodeResources qui, comme le mentionne le paragraphe cité ci-dessus, doit contenir toutes les signatures. Cependant, le CodeResources 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érant codesign0 , codesign1 etc. Ces certificats sont en fait CMS Signatures ( 0xfade0b01 ) qui contiennent des signatures de certificats. La recherche de CMS 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 ?

3voto

David Anderson Points 30783

Voici le test de base que j'ai effectué.

J'ai installé OS X 10.10 sur un disque externe sous le nom de volume "Steelhead3". J'ai entré les commandes suivantes.

cd "/Volumes/Steelhead3/Applications/Utilities"
sudo codesign -fs - "Boot Camp Assistant.app"

J'ai ensuite fait une copie du dossier "Boot Camp Assistant.app". Ensuite, j'ai édité le fichier "/Volumes/Steelhead3/Applications/Utilities/Boot Camp Assistant.app/Contents/Info.plist" et j'ai fait un petit changement concernant les modèles de Macs qui peuvent faire l'installation USB de Windows.

À ce stade, j'ai exécuté les commandes suivantes.

cd "/Volumes/Steelhead3/Applications/Utilities"
sudo codesign -fs - "Boot Camp Assistant.app"

J'ai ensuite démarré Windows et utilisé l'application Windiff.exe pour comparer les fichiers. Je m'attendais à voir les modifications apportées aux fichiers "Info.plist", ce qui a été le cas. Les fichiers "/Volumes/Steelhead3/Applications/Utilities/Boot Camp Assistant.app/Contents/MacOS/Boot Camp Assistant" semblaient également avoir été modifiés. Comme il s'agit d'un fichier binaire, j'ai d'abord converti les versions avant et après en caractères hexadécimaux, puis j'ai utilisé Windiff.exe pour trouver les différences. Les seules différences sont indiquées ci-dessous.

enter image description here

Il semble que la seule différence soit un changement de 20 octets dans le fichier binaire exécutable. Je suppose que c'est là que le hachage est stocké. Tous les autres fichiers sont restés inchangés.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X