DEENESPTFRRUARHIKOZHNL

module ara::crypto — Cryptography

Spezifikation: AUTOSAR_AP_SWS_Cryptography.pdf (R25-11) · 387 API-Records

Guide du moduleGÉNÉRÉ PAR IA

Fournit des opérations cryptographiques isolées, la gestion des clés et des services de certificats X.509 pour les applications.
GÉNÉRÉ PAR IA non vérifié Modèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : b84ff51de547 Provenance Questions ouvertes (1)
Ancre causale : R25-11 Valable à partir de R25-11 Synthétisé pour cette version de spécification.
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand

Fournit des opérations cryptographiques isolées, la gestion des clés et des services de certificats X.509 pour les applications.

Le cluster fonctionnel Cryptography fournit des services de sécurité standardisés pour le chiffrement symétrique et asymétrique, la vérification de signature ainsi que la gestion sécurisée des clés et des certificats (PlatformDesign p. 71). L'accès aux opérations cryptographiques et aux emplacements de clé persistants s'effectue de manière strictement isolée via des fournisseurs spécifiques à la plateforme et des spécificateurs d'instance déclarés dans le manifeste (SWS Cryptography p. 39). L'application des restrictions d'utilisation empêche toute compromission du matériel de clé sensible ([SWS_CRYPT_50092]).

Le cluster fonctionnel Cryptography (ara::crypto) fournit une architecture de sécurité complète pour l'AUTOSAR Adaptive Platform (PlatformDesign p. 71). Pour se prémunir contre la compromission d'applications utilisateur, la conservation des clés et l'exécution cryptographique sont généralement encapsulées dans un démon de plateforme isolé ou un module matériel de sécurité (HSM) (AUTOSAR AP EXP SWArchitecture p. 97, SWS Cryptography p. 87). La fonctionnalité globale se divise en CryptoProvider spécialisés pour les primitives de calcul, l'espace de stockage de clés pour les emplacements de clés persistants (KeySlots) ainsi qu'un X509Provider à l'échelle de la machine pour la gestion des certificats PKI (SWS Cryptography p. 39).

diag_crypto_arch App Adaptive Application Daemon Cryptography Daemon (ara::crypto) App->Daemon IPC / C++ API CryptoProvider CryptoProvider (HSM / Driver / Software) Daemon->CryptoProvider Primitive Execution KeyStorage Key Storage Provider (KeySlots) Daemon->KeyStorage Key Lifecycle X509Prov X.509 Provider (Certificates / CRL) Daemon->X509Prov PKI Services KeyStorage->CryptoProvider Key Deployment

Diagramme de contexte : relations d'architecture et de composants du cluster fonctionnel Cryptography entre application, démon et fournisseurs. Sources : SWS Cryptography p. 39, PlatformDesign p. 71, AUTOSAR AP EXP SWArchitecture p. 97.

Les applications créent des contextes cryptographiques tels que des chiffrements symétriques ([SWS_CRYPT_20742]), des chiffrements authentifiés ([SWS_CRYPT_20745]), des fonctions de hachage ([SWS_CRYPT_20747]) ou des instances de signataire et de vérificateur ([SWS_CRYPT_20756], [SWS_CRYPT_20757]) via leur fournisseur (AUTOSAR AP EXP SWArchitecture p. 99). Le traitement suit un cycle de vie déterministe : après la liaison de la clé (SetKey), la transformation est initiée via Start(), transmise en flux via Update() et finalisée avec Finish() (AUTOSAR AP TR SystemTests p. 206, EXP SWArchitecture p. 104). Des AllowedUsageFlags immuables empêchent efficacement toute utilisation non autorisée de la clé ([SWS_CRYPT_50092], AUTOSAR AP TR SystemTests p. 177).

diag_context_state Uninit Uninitialized Ready Ready (Key Deployed) Uninit->Ready SetKey() Ready->Uninit Reset() Streaming Processing (Started / Update) Ready->Streaming Start() Streaming->Uninit Cancel() / Reset() Streaming->Streaming Update() / UpdateConfidentialData() Finished Finished / Digest Available Streaming->Finished Finish() / FinishEncrypt() Finished->Uninit Reset() Finished->Ready Start() (Re-use)

Diagramme d'états : cycle de vie des contextes de transformation cryptographique, de l'allocation à la réinitialisation. Sources : [SWS_CRYPT_20742], [SWS_CRYPT_23911], [SWS_CRYPT_23625], [SWS_CRYPT_50046], [SWS_CRYPT_50212].

Les certificats et les CSR sont gérés via le X509Provider ([SWS_CRYPT_40099], [SWS_CRYPT_40640]), tandis que les contextes de validation vérifient les chaînes de certificats en prenant en compte les listes de révocation CRL ([SWS_CRYPT_50183]) et les réponses OCSP ([SWS_CRYPT_50124]) (AUTOSAR AP TR SystemTests p. 194). L'attribution des KeySlots et des certificats aux applications s'effectue sur la base de modèles dans le manifeste via InstanceSpecifier (AUTOSAR AP TPS ManifestSpecification p. 245, AUTOSAR AP TPS ManifestSpecification p. 649). L'ensemble des interfaces opère sans exceptions avec des retours ara::core::Result et signale les erreurs via le CryptoErrorDomain ([SWS_CRYPT_19902], SWS Cryptography p. 208).

Architecture, domaines de sécurité et isolation par démon

Le cluster fonctionnel Cryptography (ara::crypto) forme la base de sécurité centrale de l'AUTOSAR Adaptive Platform et fournit des mécanismes cryptographiques de base, la gestion des clés ainsi que des services de certificats (PlatformDesign p. 71). Conformément au modèle de confiance de la plateforme, les clusters fonctionnels de plateforme font partie du socle de confiance, tandis que les Adaptive Applications sont exécutées dans l'espace utilisateur non privilégié (SWS Cryptography p. 37). Afin de protéger efficacement le matériel de clé et les opérations cryptographiques, même en cas de compromission potentielle d'une application, l'architecture est généralement conçue autour d'un démon ; l'exécution proprement dite et la conservation des clés demeurent dans un processus de plateforme isolé ou dans un environnement d'exécution sécurisé (AUTOSAR AP EXP SWArchitecture p. 97, SWS Cryptography p. 87).

L'architecture divise la fonctionnalité cryptographique en trois domaines principaux : le CryptoProvider pour les primitives de calcul et les transformations de clés, l'espace de stockage de clés (ara::crypto::keys) pour la conservation persistante des objets, ainsi que le X509Provider (ara::crypto::x509) pour la gestion des certificats (SWS Cryptography p. 39, SWS Cryptography p. 87). Plusieurs instances spécialisées de CryptoProvider peuvent coexister en parallèle sur un calculateur, par exemple pour interfacer différents modules matériels de sécurité (HSM, TPM) ou des pilotes logiciels (SWS Cryptography p. 39). Il n'existe toutefois délibérément aucune interopérabilité entre les différents fournisseurs : un objet cryptographique ou une clé appartient exactement à un seul fournisseur et ne peut pas être traité par un autre fournisseur (SWS Cryptography p. 39). Cette encapsulation stricte est vraisemblablement due au fait que les domaines de sécurité matériels imposent physiquement les limites de leurs clés et que les descripteurs de clés ne sont pas valides d'un domaine à l'autre. Question Q-63efe107cf111983 (ouverte)

diag_crypto_arch App Adaptive Application Daemon Cryptography Daemon (ara::crypto) App->Daemon IPC / C++ API CryptoProvider CryptoProvider (HSM / Driver / Software) Daemon->CryptoProvider Primitive Execution KeyStorage Key Storage Provider (KeySlots) Daemon->KeyStorage Key Lifecycle X509Prov X.509 Provider (Certificates / CRL) Daemon->X509Prov PKI Services KeyStorage->CryptoProvider Key Deployment

Diagramme de contexte : relations d'architecture et de composants du cluster fonctionnel Cryptography entre application, démon et fournisseurs. Sources : SWS Cryptography p. 39, PlatformDesign p. 71, AUTOSAR AP EXP SWArchitecture p. 97.

Points d'entrée et initialisation des fournisseurs cryptographiques

L'entrée dans le module s'effectue par des fonctions d'entrée globales qui servent de fabriques pour les interfaces d'abstraction centrales (SWArchitecture p. 71). Les applications créent ou chargent une instance d'un CryptoProvider via la fonction [SWS_CRYPT_20099] en indiquant un ara::core::InstanceSpecifier modélisé. Pour la gestion des certificats, il n'existe dans l'ensemble du système qu'un seul fournisseur de certificats global, qui est chargé via [SWS_CRYPT_40099] (SWS Cryptography p. 39). Des services auxiliaires globaux sont également disponibles, notamment la génération directe de données aléatoires via [SWS_CRYPT_30098] ainsi que l'interrogation d'un compteur de sécurité matériel via [SWS_CRYPT_20098] (SWArchitecture p. 71).

Les ressources de clés persistantes ne sont pas instanciées directement, mais chargées via des emplacements logiques de clés (KeySlots). À cette fin, l'environnement d'exécution fournit les fonctions [SWS_CRYPT_50004] pour les accès en lecture seule et [SWS_CRYPT_50005] pour les emplacements de clés accessibles en écriture, qui valident l'identifiant d'instance transmis par rapport à la configuration des autorisations (SWS Cryptography p. 87, AUTOSAR AP TPS ManifestSpecification p. 649). Via une instance de KeySlot obtenue, l'instance de fournisseur associée peut être interrogée au moyen de [SWS_CRYPT_30403], ce qui garantit le maintien d'une liaison étroite entre l'emplacement de stockage et l'environnement d'exécution (SWS Cryptography p. 39).

Dès qu'une instance de CryptoProvider est disponible, elle agit comme une fabrique centrale pour l'instanciation de contextes de travail cryptographiques spécifiques (AUTOSAR AP EXP SWArchitecture p. 99). Parmi les contextes pouvant être créés figurent notamment des contextes pour générateurs de nombres aléatoires ([SWS_CRYPT_20741]), chiffrements symétriques par blocs et par flux ([SWS_CRYPT_20742]), chiffrement authentifié ([SWS_CRYPT_20745]), codes d'authentification de message ([SWS_CRYPT_20746]), fonctions de hachage cryptographique ([SWS_CRYPT_20747]), chiffrement ou déchiffrement asymétrique ([SWS_CRYPT_20750], [SWS_CRYPT_20751]) ainsi que des contextes de signature et de vérification ([SWS_CRYPT_20756], [SWS_CRYPT_20757]) (EXP SWArchitecture p. 99).

Contextes de transformation cryptographique et traitement des données

Le traitement des données cryptographiques dans ara::crypto suit un cycle de vie strictement basé sur des états, garantissant le découplage entre la configuration de l'algorithme, la liaison de la clé et le traitement en flux (AUTOSAR AP TR SystemTests p. 211). Après l'allocation du contexte via le fournisseur, celui-ci se trouve initialement dans l'état non initialisé. Ce n'est que par la transmission d'une clé compatible via les surcharges typées de SetKey() — par exemple pour les clés symétriques ([SWS_CRYPT_23911]), les clés privées ([SWS_CRYPT_23515]) ou directement depuis un KeySlot ([SWS_CRYPT_50043]) — que le contexte passe à l'état prêt (AUTOSAR AP TR SystemTests p. 206).

Pour les traitements en flux, la transformation est initiée par Start(), éventuellement en transmettant un vecteur d'initialisation ou un contexte ([SWS_CRYPT_22110], [SWS_CRYPT_23625], [SWS_CRYPT_50020]). Ensuite, les blocs de données peuvent être injectés progressivement via Update() ([SWS_CRYPT_21113], [SWS_CRYPT_22113], [SWS_CRYPT_50139]). En cas de chiffrement authentifié (AEAD), l'interface sépare strictement les données associées, traitées via [SWS_CRYPT_20313], des données utiles confidentielles via [SWS_CRYPT_50074] (EXP SWArchitecture p. 104). La conclusion d'une transformation s'effectue via Finish() ou FinishEncrypt() ([SWS_CRYPT_21115], [SWS_CRYPT_23618], [SWS_CRYPT_50075]), après quoi les étiquettes d'authentification ou les sommes de contrôle peuvent être lues via GetDigest() ([SWS_CRYPT_21116], [SWS_CRYPT_22116]).

Outre le mode de traitement en flux, les classes de contexte telles que les chiffrements symétriques et les chiffrements authentifiés prennent en charge des appels uniques compacts via [SWS_CRYPT_50047] ou [SWS_CRYPT_50078], ce qui permet de chiffrer ou de déchiffrer efficacement de petites charges utiles sans appel de protocole multi-étapes (SWS Cryptography p. 58). Si une opération en cours doit être interrompue, un appel à Cancel() ([SWS_CRYPT_50023], [SWS_CRYPT_50046]) ou à Reset() ([SWS_CRYPT_50212]) ramène de manière déterministe le contexte à l'état initial réinitialisé (EXP SWArchitecture p. 100).

diag_context_state Uninit Uninitialized Ready Ready (Key Deployed) Uninit->Ready SetKey() Ready->Uninit Reset() Streaming Processing (Started / Update) Ready->Streaming Start() Streaming->Uninit Cancel() / Reset() Streaming->Streaming Update() / UpdateConfidentialData() Finished Finished / Digest Available Streaming->Finished Finish() / FinishEncrypt() Finished->Uninit Reset() Finished->Ready Start() (Re-use)

Diagramme d'états : cycle de vie des contextes de transformation cryptographique, de l'allocation à la réinitialisation. Sources : [SWS_CRYPT_20742], [SWS_CRYPT_23911], [SWS_CRYPT_23625], [SWS_CRYPT_50046], [SWS_CRYPT_50212].

Gestion des clés, encapsulation et application des autorisations

Dans le modèle objet, les clés cryptographiques sont typées en tant que CryptoObject ou RestrictedUseObject (AUTOSAR AP EXP SWArchitecture p. 111, EXP SWArchitecture p. 111). Le standard de la plateforme distingue les clés symétriques (SymmetricKey), les clés asymétriques privées (PrivateKey) et les clés publiques (PublicKey) (SWS Cryptography p. 291). Le matériel de clé peut être généré directement via le CryptoProvider ([SWS_CRYPT_20721], [SWS_CRYPT_20722]) ou dérivé d'un matériel de clé existant en paramétrant un KeyDerivationFunctionCtx ([SWS_CRYPT_20748]) avec une clé de base et en l'exécutant via [SWS_CRYPT_21515] (EXP SWArchitecture p. 108).

Pour appliquer le principe du moindre privilège, chaque objet clé comporte des restrictions d'utilisation immuables (AllowedUsageFlags), qui peuvent être interrogées via [SWS_CRYPT_50092] (AUTOSAR AP TR SystemTests p. 177). La pile cryptographique valide à chaque tentative de liaison (SetKey) si l'opération du contexte cible (par exemple le chiffrement, la signature, la dérivation ou l'exportation) est autorisée par les indicateurs de la clé, et rejette strictement les utilisations non autorisées (AUTOSAR AP TR SystemTests p. 177, SWArchitecture p. 95). L'affectation par défaut pour un algorithme peut être déterminée via [SWS_CRYPT_20955].

Pour l'échange sécurisé de clés, le module implémente plusieurs procédés standardisés : lors d'un accord de clé asymétrique (Diffie-Hellman / ECDH), un KeyAgreementPrivateCtx est créé via [SWS_CRYPT_20758], auquel la clé privée est liée ([SWS_CRYPT_21313]) ; la méthode [SWS_CRYPT_21312] calcule ensuite la clé cible symétrique commune en intégrant la clé publique de la partie distante (AUTOSAR AP TR SystemTests p. 179). Dans le cas du Key Encapsulation Mechanism (KEM), un KeyEncapsulatorPublicCtx ([SWS_CRYPT_20752]) encapsule une clé symétrique au moyen de [SWS_CRYPT_21813], tandis que la partie distante effectue la décapsulation via un KeyDecapsulatorPrivateCtx ([SWS_CRYPT_20753]) au moyen de [SWS_CRYPT_21412] (AUTOSAR AP TR SystemTests p. 173, AUTOSAR TR AdaptivePlatformSystemTests p. 188). Le Key Wrapping ([SWS_CRYPT_24014], [SWS_CRYPT_24016]) et l'exportation sécurisée ([SWS_CRYPT_20728]) sont disponibles pour le transport protégé de clés (AUTOSAR AP TR SystemTests p. 174, AUTOSAR AP TR SystemTests p. 182).

Accord de clés asymétrique (ECDH) et dérivation symétriqueApp (CRYPTOApp01)CryptoProviderKeyAgreementPrivateCtxSymmetricKeyCreateKeyAgreementPrivateCtx(algId)Result<KeyAgreementPrivateCtx::Sptr>SetKey(privKey)Result<void>AgreeKey(otherSidePublicKey, targetAlgId, allowedUsage)Créer un objet de clé symétriqueResult<SymmetricKey::Sptr>

Diagramme de séquence : accord de clé asymétrique via Diffie-Hellman et dérivation de clés utiles symétriques. Sources : [SWS_CRYPT_20758], [SWS_CRYPT_21313], [SWS_CRYPT_21312], AUTOSAR AP TR SystemTests p. 179.

Les signatures asymétriques sont traitées via des contextes distincts : la signature s'effectue via un SignerPrivateCtx ([SWS_CRYPT_20756]) et la méthode [SWS_CRYPT_23512], tandis que la vérification est réalisée via un VerifierPublicCtx ([SWS_CRYPT_20757]) et la méthode [SWS_CRYPT_24112] (AUTOSAR AP TR SystemTests p. 164, SWArchitecture p. 84). Si un KeySlot est mis à jour en arrière-plan par des services de gestion privilégiés (par ex. un renouvellement de clé OTA), les bibliothèques consommatrices peuvent être notifiées via un observateur de mise à jour au moyen de [SWS_CRYPT_30404] afin de recharger de manière synchrone leur matériel de clé (AUTOSAR AP SWS Cryptography p. 36).

Génération et vérification de signature via SignerPrivateCtx et VerifierPublicCtxApplikationCryptoProviderSignerPrivateCtxVerifierPublicCtxCreateSignerPrivateCtx(algId)Result<SignerPrivateCtx::Sptr>SetKey(privKey)Result<void>Sign(message, signatureBuffer, format)Result<std::size_t> (taille de signature)Use Case: Vérification de la signatureCreateVerifierPublicCtx(algId)Result<VerifierPublicCtx::Sptr>SetKey(pubKey)Result<void>Verify(message, signature, format)Result<bool> (valide / invalide)

Diagramme de séquence : déroulement de la génération et de la vérification de signature à l'aide de contextes privés et publics distincts. Sources : [SWS_CRYPT_20756], [SWS_CRYPT_23515], [SWS_CRYPT_23512], [SWS_CRYPT_20757], [SWS_CRYPT_24115], [SWS_CRYPT_24112], AUTOSAR AP TR SystemTests p. 164.

Gestion, validation et groupes de certificats X.509

Le sous-système ara::crypto::x509 fournit des fonctionnalités standardisées pour les infrastructures à clés publiques (PKI) (EXP SWArchitecture p. 116). Le X509Provider central ([SWS_CRYPT_40099]) prend en charge aussi bien la mémoire de session volatile que les stockages persistants (SWS Cryptography p. 39). Les certificats et les chaînes sont analysés à partir de tampons d'octets via [SWS_CRYPT_40614] ou [SWS_CRYPT_40616]. Pour demander de nouveaux certificats d'identité, les applications peuvent générer des demandes de signature de certificat (CSR) signées cryptographiquement via [SWS_CRYPT_40640], le contexte de signataire et le Distinguished Name (DN) étant transmis via [SWS_CRYPT_50186] (AUTOSAR AP TR SystemTests p. 189).

Pour le contrôle de conformité et de validité, l'application instancie un CertificateValidationCtx via [SWS_CRYPT_50125]. Des ancres de confiance (Trust Anchors) sont ajoutées à ce contexte via [SWS_CRYPT_50117], des options de validation sont définies via [SWS_CRYPT_50120] et des horodatages de référence sont enregistrés via [SWS_CRYPT_50121]. La vérification hiérarchique de la chaîne par rapport à la chaîne de confiance s'effectue via [SWS_CRYPT_50122] ou [SWS_CRYPT_50123] (AUTOSAR AP TR SystemTests p. 194). Pour la prise en compte des révocations de certificats, des listes de révocation de certificats (CRL) peuvent être importées ([SWS_CRYPT_50183]) ou des requêtes en ligne sur le statut des certificats (OCSP selon la RFC 6960) peuvent être intégrées à l'état de validation via [SWS_CRYPT_40626], [SWS_CRYPT_50185] et [SWS_CRYPT_50124] (AUTOSAR AP TR SystemTests p. 194).

Afin de découpler les consommateurs de certificats des instances de certificats individuelles lors du renouvellement des clés, le manifeste prend en charge le concept de CryptoCertificateGroup (AUTOSAR AP TPS ManifestSpecification p. 657). Les applications consommatrices chargent l'ensemble du groupe de certificats logiquement liés via [SWS_CRYPT_50126], tandis que des services d'administration privilégiés peuvent remplacer ou purger dynamiquement les certificats via [SWS_CRYPT_50127] et [SWS_CRYPT_50128] (AUTOSAR AP TPS ManifestSpecification p. 657).

Validation de certificat X.509 avec chaîne de certificats, CRL et OCSPApplikationX509ProviderValidationCtxCreateCertificateValidationCtx()Result<CertificateValidationCtx::Sptr>AddTrustedCertificate(rootCert)Result<void>ImportCrl(instanceSpecifier, crlBytes, format)Result<CertificateValidationStatus>AddOcspResponse(ocspResponse, issuerCert)Result<CertificateValidationStatus>ValidateCertificate(targetCert)Result<CertificateValidationResult::Sptrc>

Diagramme de séquence : validation de certificat X.509 avec chaîne de certificats, import de CRL et vérification de statut OCSP en ligne. Sources : [SWS_CRYPT_40099], [SWS_CRYPT_50125], [SWS_CRYPT_50122], [SWS_CRYPT_50183], [SWS_CRYPT_50124], AUTOSAR AP TR SystemTests p. 194.

Modélisation du manifeste, interfaces de port et déploiement

L'intégration des ressources cryptographiques dans une architecture globale de véhicule s'effectue de manière déclarative via le métamodèle AUTOSAR dans le manifeste ARXML (AUTOSAR AP TPS ManifestSpecification p. 244). Les composants logiciels modélisent leurs exigences de sécurité au niveau de la conception via des ports (RPortPrototype), qui sont typés par des spécialisations de CryptoInterface : CryptoKeySlotInterface pour les emplacements de clés, CryptoCertificateInterface pour les ressources de certificats et CryptoProviderInterface pour l'accès aux fournisseurs d'exécution (TPS ManifestSpecification p. 167, AUTOSAR AP TPS ManifestSpecification p. 245). Les attributs des interfaces définissent de manière immuable si des droits de lecture ou d'écriture sont accordés (writeAccess) et quels types d'objets sont autorisés (TPS ManifestSpecification p. 168, TPS ManifestSpecification p. 438).

Dans le manifeste de déploiement, la configuration cible (Target Configuration) relie les prototypes de ports abstraits aux ressources de plateforme physiques concrètes (AUTOSAR AP TPS ManifestSpecification p. 649). L'élément de métamodèle CryptoKeySlotToPortPrototypeMapping mappe le port d'un processus sur un CryptoKeySlot déclaré dans le CryptoModuleInstantiation de la machine (TPS ManifestSpecification p. 614, TPS ManifestSpecification p. 646). De manière analogue, CryptoCertificateToPortPrototypeMapping associe des certificats (TPS ManifestSpecification p. 655). Au moment de l'exécution, le chemin du port dans le manifeste représente le ara::core::InstanceSpecifier, que le code applicatif transmet aux fonctions de chargement telles que [SWS_CRYPT_50004] (ManifestSpecification p. 154).

Pour les interactions de plateforme entre clusters fonctionnels – par exemple entre le Communication Management (SecOC, IPsec, TLS) et la pile cryptographique –, il n'existe pas de prototypes de port classiques (TPS ManifestSpecification p. 861). Ici, le InstanceSpecifier est formé à la place par des éléments dérivés de FunctionalClusterInteractsWithFunctionalClusterMapping, par exemple ComKeyToCryptoKeySlotMapping ou SecOcJobMapping (TPS ManifestSpecification p. 861, TPS ManifestSpecification p. 864, ManifestSpecification p. 411). La sécurisation de la persistance (Persistency Deployment) et les sommes de contrôle des clusters logiciels intègrent également leurs clés et leurs fournisseurs via ces mappages de manifeste standardisés (TPS ManifestSpecification p. 867, TPS ManifestSpecification p. 896).

Comportement en cas d'erreur

Le concept de gestion des erreurs du module cryptographique suit les exigences strictes de l'Adaptive Platform relatives au code insensible aux erreurs et sans exception (noexcept) (SWS Cryptography p. 145). Toutes les opérations synchrones renvoient les situations d'erreur via le type de résultat générique ara::core::Result<T, ara::core::ErrorCode> (SWS Cryptography p. 208). Les codes d'erreur sont ancrés dans un domaine d'erreur dédié, représenté via [SWS_CRYPT_19902] ; son nom peut être interrogé via [SWS_CRYPT_19950] et la description textuelle de l'erreur via [SWS_CRYPT_19953]. Pour les applications qui utilisent explicitement la gestion des exceptions, la pile fournit le type d'exception CryptoException ([SWS_CRYPT_19906]) et la fonction utilitaire [SWS_CRYPT_19954].

Les codes d'erreur fonctionnels typiques comprennent des violations de contexte telles que CryptoErrc::kUninitializedContext, lorsque des opérations cryptographiques sont déclenchées avant l'appel de SetKey(), ou CryptoErrc::kInvalidInputSize, lorsque les tampons de données d'entrée transmis ne correspondent pas à la grille de blocs requise (SWS Cryptography p. 208). Lors des opérations de sérialisation et de conversion, CryptoErrc::kUnknownIdentifier signale des valeurs d'argument non prises en charge et CryptoErrc::kIncompatibleArguments des combinaisons de paramètres incompatibles (SWS Cryptography p. 145). Lors de l'accès aux ressources de clés, la pile empêche les accès non autorisés en renvoyant kAccessViolation (SWS Cryptography p. 87). Lors de l'analyse d'extensions de certificat X.509 personnalisées défectueuses, l'analyseur s'interrompt avec CryptoErrc::kRuntimeFault (SWS Cryptography p. 280, SWS Cryptography p. 356).

Afin de rétablir un état défini dans le contexte après la survenance d'une erreur et d'éviter les fuites de mémoire ou les tampons de streaming bloqués dans le démon, l'appelant doit nettoyer le contexte. Cela s'effectue soit de manière ciblée par l'appel de Cancel() ([SWS_CRYPT_50046], [SWS_CRYPT_50089]), ce qui élimine les transformations inachevées, soit par Reset() ([SWS_CRYPT_50212]), ce qui réinitialise entièrement le contexte dans l'état antérieur à la liaison de la clé (EXP SWArchitecture p. 100).

Preuves détaillées supplémentaires

La spécification du module Cryptography s'appuie sur une série d'exigences et de documents d'architecture centraux, présentés ci-après :

Ce guide de module a été généré par un assistant de curation IA sur la base de la spécification AUTOSAR Adaptive R25-11.

function: 261 type alias: 43 variable: 43 class: 34 enumeration: 5 struct: 1

Carte des thèmes

Vue détaillée

Sélectionnez une entrée dans le plan.

ara::crypto

Crypto Error Domain class that provides interfaces as defined by ara::core::ErrorDomain such as a name of the Crypto Error Domain or message

hérite de ara::core::ErrorDomain

Exception type thrown for CRYPTO errors.

hérite de ara::core::Exception

Formatter classe

Formatter object interface.

128 bit secure counter made up of two uint64_t’s representing the most significant and least significant bits

Serializable object interface.

Return a reference to the global CryptoErrorDomain.

constexpr const ara::core::ErrorDomain & GetCryptoErrorDomain () noexcept;

This factory method shall create or return the existing instance of a specific Crypto Provider.

ara::core::Result< cryp::CryptoProvider::Sptr > LoadCryptoProvider (const ara::core::InstanceSpecifier &iSpecify) noexcept;
LoadFormatter fonction

Factory that creates a Formatter.

ara::core::Result< Formatter::Sptr > LoadFormatter () noexcept;
LoadKeySlot fonction

Load a read-only key slot. This factory method shall load the information associated with the specified KeySlot into a KeySlot object.

ara::core::Result< cryp::KeySlot::Sptr > LoadKeySlot (const ara::core::InstanceSpecifier &iSpecify) noexcept;

Load a writeable key slot. This factory method shall load the information associated with the specified KeySlot into a WriteableKeySlot object.

ara::core::Result< cryp::WriteableKeySlot::Sptr > LoadWriteableKeySlot (const ara::core::InstanceSpecifier &iSpecify) noexcept;

This factory method shall create or return the existing instance of the singleton X.509 Provider.

ara::core::Result< x509::X509Provider::Sptr > LoadX509Provider () noexcept;
MakeErrorCode fonction

Makes Error Code instances from the Crypto Error Domain. The returned ErrorCode instance always references to CryptoErrorDomain.

constexpr ara::core::ErrorCode MakeErrorCode (CryptoErrorDomain::Errc code, ara::core::ErrorDomain::SupportDataType data) noexcept;
CryptoErrc énumération

Defines the error codes for the ara::crypto::CryptoErrorDomain

enum class CryptoErrc : ara::core::ErrorDomain::CodeType {...};
CryptoObjectType énumération

Enumeration of all types of crypto objects, i.e. types of content that can be stored to a key slot.

enum class CryptoObjectType : std::uint8_t {...};
CryptoTransform énumération

Enumeration of cryptographic transformation directions.

enum class CryptoTransform : std::uint8_t {...};
AlgId alias de type

Type for holding StringView of algorithm according to standardized format described in the chapter ’Naming Convention’.

using AlgId = ara::core::StringView;
AlgIdString alias de type

Type for holding String of algorithm according to standardized format described in the chapter ’Naming Convention’.

using AlgIdString = ara::core::String;
AllowedUsageFlags alias de type

Type for holding bit-flags of allowed usages of a key.

using AllowedUsageFlags = std::uint32_t;
FormatId alias de type

A container type for the encoding format identifiers.

using FormatId = std::uint32_t;
LoadCryptoProvider alias de type

Type for holding StringView of algorithm according to standardized format described in the chapter ’Naming Convention’.

ReadOnlyMemRegion alias de type

Read-Only Memory Region (intended for [in] arguments)

using ReadOnlyMemRegion = ara::core::Span<const std::uint8_t>;
ReadWriteMemRegion alias de type

Read-Write Memory Region (intended for [out] or [in/out] arguments)

using ReadWriteMemRegion = ara::core::Span<std::uint8_t>;
Timestamp alias de type

The key can be used for data decryption.

constexpr AllowedUsageFlags kAllowDataDecryption {0x0002};

The following constants define 1-bit values representing allowed usages. The key can be used for data encryption

constexpr AllowedUsageFlags kAllowDataEncryption {0x0001};

The derived key can be exported in plaintext.

constexpr AllowedUsageFlags kAllowDerivedPlaintextExport {0x4000};

The key can be used as input to a HashFunctionCtx.

constexpr AllowedUsageFlags kAllowHashCalculation {0x1000};

The key can be used as private or public input to key agreement.

constexpr AllowedUsageFlags kAllowKeyAgreement {0x0020};

The key can be used for key derivation.

constexpr AllowedUsageFlags kAllowKeyDerivation {0x0040};

The key can be used as a key encryption key for key unwrapping or key decapsulation.

constexpr AllowedUsageFlags kAllowKeyUnwrapping {0x0100};

The key can be used as a key encryption key for key wrapping or key encapsulation.

constexpr AllowedUsageFlags kAllowKeyWrapping {0x0080};
kAllowMac variable

The key can be used for MAC generation and verification.

constexpr AllowedUsageFlags kAllowMac {0x0004};
kAllowPersist variable

The key can persisted.

constexpr AllowedUsageFlags kAllowPersist {0x0200};

The key can be exported in plaintext.

constexpr AllowedUsageFlags kAllowPlaintextExport {0x2000};
kAllowRngInit variable

The symmetric key can be used for seeding of a RandomGeneratorCtx.

constexpr AllowedUsageFlags kAllowRngInit {0x0800};

The key can be securely exported (protected export)

constexpr AllowedUsageFlags kAllowSecuredExport {0x0400};

The key can be used for signature generation.

constexpr AllowedUsageFlags kAllowSigGeneration {0x0008};

The key can be used for signature verification.

constexpr AllowedUsageFlags kAllowSigVerification {0x0010};

Export DER-encoded value of an object.

constexpr FormatId kFormatDerEncoded {2};

Export PEM-encoded value of an object.

constexpr FormatId kFormatPemEncoded {3};

Export only raw value of an object, i.e., a plain byte array for symmetric keys and ISO/IEC 7816-8 / IEEE P1363 encoding for combined values.

constexpr FormatId kFormatRawValueOnly {1};

Proprietary format that is only valid in the context of a CryptoProvider.

constexpr FormatId kProprietaryFormat {0};

ara::crypto::cryp

Authenticated Cipher Context interface.

hérite de CryptoContext

A common interface for all cryptographic objects recognizable by the Crypto Provider.

hérite de ara::crypto::Serializable

base de PrivateKey, PublicKey, SymmetricKey

CryptoProviderInterface representing one implementation of a set of cryptographic primitives with a key storage.

Interface for asymmetric decryption.

hérite de CryptoContext

Interface for asymmetric encryption.

hérite de CryptoContext

Hash function interface.

hérite de CryptoContext

Key Agreement Private key Context interface.

hérite de CryptoContext

Asymmetric Key Encapsulation Mechanism (KEM) Private key Context interface.

hérite de CryptoContext

Key Derivation Function interface.

hérite de CryptoContext

Asymmetric Key Encapsulation Mechanism (KEM) Public key Context interface.

hérite de CryptoContext

KeySlot classe

KeySlot interface representing a storage location for a key in a CryptoProvider.

base de WriteableKeySlot

Keyed Message Authentication Code Context interface definition.

hérite de CryptoContext

PrivateKey classe

Generalized Asymmetric Private Key interface.

hérite de CryptoObject

A contexts for importing secured data such as secret key-material.

hérite de CryptoContext

PublicKey classe

General Asymmetric Public Key interface.

hérite de CryptoObject

Interface of Random Number Generator Context.

hérite de CryptoContext

Signature Private key Context interface.

hérite de CryptoContext

Interface for Symmetric Cipher Operations.

hérite de CryptoContext

Symmetric Key interface.

hérite de CryptoObject

Context of a symmetric key wrap algorithm.

hérite de CryptoContext

Signature Verification Public key Context interface.

hérite de CryptoContext

WriteableKeySlot interface representing a writeable storage location for a key in a Crypto Provider.

hérite de KeySlot

ara::crypto::x509

X.509 Certificate interface.

hérite de ara::crypto::Serializable

Certificate Validation Context.

X.509 Certificate Validation Result.

Certificate Signing Request (CSR) object interface.

hérite de ara::crypto::Serializable

Interface of OcspResponse.

X509DN classe

Interface of X.509 Distinguished Name (DN).

hérite de ara::crypto::Serializable

X.509 Provider interface.

Certificate Validation Status.

enum class CertificateValidationStatus : std::uint8_t {...};
OcspResponseStatus énumération

On-line Certificate Status Protocol (OCSP) Response Status.

enum class OcspResponseStatus : std::uint8_t {...};

Type for holding bit-flags of certificate validation options.

using CertificateValidationOptions = std::uint32_t;
X509ExtendedKeyUsage alias de type

X.509 v3 Extended Key Usage type definition.

using X509ExtendedKeyUsage = std::uint32_t;
X509KeyUsage alias de type

X.509 v3 Key Usage type definition.

using X509KeyUsage = std::uint32_t;
kClientAuth variable

TLS WWW client authentication.

constexpr X509ExtendedKeyUsage kClientAuth {0x4000};
kCodeSigning variable

Signing of downloadable executable code.

constexpr X509ExtendedKeyUsage kCodeSigning {0x2000};

The key can be used for Certificates Revokation Lists (CRL) signing.

constexpr X509KeyUsage kConstrCrlSign {0x0200};

The key can be used for data encipherment.

constexpr X509KeyUsage kConstrDataEncipherment {0x1000};

The enciphermet key can be used for deciphering only.

constexpr X509KeyUsage kConstrDecipherOnly {0x0080};

The key can be used for digital signature production.

constexpr X509KeyUsage kConstrDigitalSignature {0x8000};

The enciphermet key can be used for enciphering only.

constexpr X509KeyUsage kConstrEncipherOnly {0x0100};

The key can be used for a key agreement protocol execution.

constexpr X509KeyUsage kConstrKeyAgreement {0x0800};

The key can be used for certificates signing.

constexpr X509KeyUsage kConstrKeyCertSign {0x0400};

The key can be used for key encipherment.

constexpr X509KeyUsage kConstrKeyEncipherment {0x2000};

The key can be used in cases requiring the "non-repudiation" guarantee.

constexpr X509KeyUsage kConstrNonRepudiation {0x4000};

Email protection.

constexpr X509ExtendedKeyUsage kEmailProtection {0x1000};
kIgnoreCrl variable

ignore previously imported CRLs

constexpr CertificateValidationOptions kIgnoreCrl {0x0008};

ignore the NotAfter field

constexpr CertificateValidationOptions kIgnoreNotAfter {0x0002};

ignore the NotBefore field

constexpr CertificateValidationOptions kIgnoreNotBefore {0x0001};

ignore all unknown critical extensions

constexpr CertificateValidationOptions kIgnoreUnknownCritical Extensions {0x0004};
kOcspOff variable

do not require OCSP response during certificate validation. This is the default behavior.

constexpr CertificateValidationOptions kOcspOff {0x0040};

require OCSP response for all certificates of chain

constexpr CertificateValidationOptions kOcspResponseCompleteChain {0x0010};

require OCSP response only for target certificate

constexpr CertificateValidationOptions kOcspResponseTargetOnly {0x0020};
kOCSPSigning variable

Signing OCSP responses.

constexpr X509ExtendedKeyUsage kOCSPSigning {0x0400};
kServerAuth variable

TLS WWW server authentication.

constexpr X509ExtendedKeyUsage kServerAuth {0x8000};
kTimeStamping variable

Binding the hash of an object to a time.

constexpr X509ExtendedKeyUsage kTimeStamping {0x0800};

Namespaces

Diagramme de classes UML du module

Abgerundete Rahmen = Namespaces; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = modulfremde bzw. externe Basisklassen. Klicken öffnet die Klassenseite.

G cluster_1 ara::crypto cluster_2 ara::crypto::cryp cluster_3 ara::crypto::x509 nara__crypto__Serializable855 Serializable nara__crypto__CryptoErrorDomain690 CryptoErrorDomain nara__core__ErrorDomain335 ara::core::ErrorDomain nara__crypto__CryptoErrorDomain690->nara__core__ErrorDomain335 nara__crypto__CryptoException764 CryptoException nara__core__Exception792 ara::core::Exception nara__crypto__CryptoException764->nara__core__Exception792 nara__crypto__Formatter631 Formatter nara__crypto__SecureCounter126 «struct» SecureCounter nara__crypto__cryp__AuthCipherCtx142 AuthCipherCtx nara__crypto__cryp__CryptoContext85 CryptoContext nara__crypto__cryp__AuthCipherCtx142->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__CryptoObject679 CryptoObject nara__crypto__cryp__CryptoObject679->nara__crypto__Serializable855 nara__crypto__cryp__DecryptorPrivateCtx616 DecryptorPrivateCtx nara__crypto__cryp__DecryptorPrivateCtx616->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__EncryptorPublicCtx829 EncryptorPublicCtx nara__crypto__cryp__EncryptorPublicCtx829->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__HashFunctionCtx412 HashFunctionCtx nara__crypto__cryp__HashFunctionCtx412->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyAgreementPrivateCtx203 KeyAgreementPrivateCtx nara__crypto__cryp__KeyAgreementPrivateCtx203->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyDecapsulatorPrivateCtx748 KeyDecapsulatorPrivateCtx nara__crypto__cryp__KeyDecapsulatorPrivateCtx748->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyDerivationFunctionCtx485 KeyDerivationFunctionCtx nara__crypto__cryp__KeyDerivationFunctionCtx485->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyEncapsulatorPublicCtx699 KeyEncapsulatorPublicCtx nara__crypto__cryp__KeyEncapsulatorPublicCtx699->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeySlot637 KeySlot nara__crypto__cryp__MessageAuthnCodeCtx845 MessageAuthnCodeCtx nara__crypto__cryp__MessageAuthnCodeCtx845->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__PrivateKey762 PrivateKey nara__crypto__cryp__PrivateKey762->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__ProtectedKeyImportCtx279 ProtectedKeyImportCtx nara__crypto__cryp__ProtectedKeyImportCtx279->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__PublicKey940 PublicKey nara__crypto__cryp__PublicKey940->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__RandomGeneratorCtx512 RandomGeneratorCtx nara__crypto__cryp__RandomGeneratorCtx512->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SignerPrivateCtx943 SignerPrivateCtx nara__crypto__cryp__SignerPrivateCtx943->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SymmetricCipherCtx167 SymmetricCipherCtx nara__crypto__cryp__SymmetricCipherCtx167->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SymmetricKey111 SymmetricKey nara__crypto__cryp__SymmetricKey111->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__SymmetricKeyWrapperCtx465 SymmetricKeyWrapperCtx nara__crypto__cryp__SymmetricKeyWrapperCtx465->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__VerifierPublicCtx35 VerifierPublicCtx nara__crypto__cryp__VerifierPublicCtx35->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__WriteableKeySlot529 WriteableKeySlot nara__crypto__cryp__WriteableKeySlot529->nara__crypto__cryp__KeySlot637 nara__crypto__cryp__CryptoProvider844 CryptoProvider nara__crypto__x509__Certificate240 Certificate nara__crypto__x509__Certificate240->nara__crypto__Serializable855 nara__crypto__x509__CertSignRequest934 CertSignRequest nara__crypto__x509__CertSignRequest934->nara__crypto__Serializable855 nara__crypto__x509__X509DN930 X509DN nara__crypto__x509__X509DN930->nara__crypto__Serializable855 nara__crypto__x509__CertificateValidationCtx565 CertificateValidationCtx nara__crypto__x509__CertificateValidationResult372 CertificateValidationResult nara__crypto__x509__OcspResponse358 OcspResponse nara__crypto__x509__X509Provider937 X509Provider