<!-- Generated from prerendered index.html. HTML SHA-256: 05f90a8345dcd71aeb6525c36f71f515de66e6ba7a6bfbd6ffe3fdb07a1509be -->

# 08 · Signature qualifiée à distance (API Cloud Signature Consortium)

> Section autonome du guide [eIDAS 2, échange par échange](https://signature.codethelaw.eu/).

En production

API CSC v2 (2.0.0.2 et 2.1) utilisée par les prestataires qualifiés ; dispositif distant certifié selon EN 419 241-2 (SAM) et EN 419 221-5 (HSM). Le déclenchement depuis le portefeuille européen est spécifié par l'ARF et en cours de déploiement.

La clé du titulaire est dans le HSM du prestataire. Le contrôle exclusif repose sur le module d'activation (SAM), qui ne libère la clé que sur présentation de données d'activation liées au condensat que le titulaire a autorisé.

## 8.1 Prérequis : la clé et le certificat qualifié

Service de signature du QTSP → Service de signature du QTSP · Certificat qualifié

### Entrée

Émission préalable, après vérification d'identité (ETSI TS 119 461).

**TEXTE**

```text
Clé ECDSA P-256 générée dans le HSM, sous contrôle du SAM
Certificat qualifié émis par l'AC qualifiée du prestataire
```

### Traitement

1.  La paire de clés est générée dans le HSM et associée au titulaire par le SAM.
2.  Le certificat porte les marqueurs qui permettront au validateur de reconnaître une QES.

### Sortie

Extensions du certificat (extrait).

**TEXTE**

```text
Subject: C=FR, GN=Camille, SN=DUPONT, CN=Camille DUPONT, serialNumber=<identifiant>
Subject Public Key Info: id-ecPublicKey, prime256v1 (P-256)
X509v3 Key Usage: critical
    Non Repudiation (contentCommitment)
X509v3 Certificate Policies:
    Policy: 0.4.0.194112.1.2      -- QCP-n-qscd (EN 319 411-2)
    Policy: <OID de la politique du prestataire>
qcStatements (1.3.6.1.5.5.7.1.3):
    0.4.0.1862.1.1                -- QcCompliance : certificat qualifié UE
    0.4.0.1862.1.4                -- QcSSCD : clé dans un QSCD
    0.4.0.1862.1.6  QcType = 0.4.0.1862.1.6.1   -- esign
    0.4.0.1862.1.5  QcPDS = https://… (fr)
Authority Information Access: OCSP - URI:http://ocsp.qtsp.example
CRL Distribution Points: URI:http://crl.qtsp.example/ac-qualifiee.crl
```

**BASE LÉGALE.** Le règlement d'exécution (UE) 2025/1943, annexe I, désigne ETSI EN 319 411-2 V2.6.1 et EN 319 412-1 V1.6.1, -2 V2.4.1 et -5 V2.5.1, avec les adaptations de cette annexe, pour la présomption de conformité des certificats qualifiés de signature. L'annexe II concerne les certificats de cachet. Le respect de ces références ne dispense pas du statut qualifié du service ; d'autres pratiques peuvent aussi démontrer la conformité (considérant 3).

**Suite :** L'application de signature découvre le service et ce certificat par l'API CSC.

## 8.2 Découvrir le service et l'identifiant de clé

Application de signature → Service de signature du QTSP · info, list, info

### Entrée

Appels CSC v2 (jeton OAuth de portée service).

**HTTP**

```http
POST /csc/v2/info
POST /csc/v2/credentials/list         Authorization: Bearer <jeton service>
POST /csc/v2/credentials/info         { "credentialID": "GX0112348", "certificates": "chain" }
```

### Traitement

1.  info décrit le service et le mode d'autorisation.
2.  credentials/list renvoie les identifiants de clés du titulaire.
3.  credentials/info renvoie l'algorithme, la chaîne de certificats, le niveau SCAL et le qualificatif de signature.

### Sortie

Réponses (exemple).

**JSON**

```json
{ "specs": "2.0.0.2", "name": "QTSP Exemple", "region": "FR", "lang": "fr",
  "authType": ["oauth2code"], "oauth2": "https://auth.qtsp.example",
  "methods": ["credentials/list", "credentials/info", "signatures/signHash"] }

{ "credentialIDs": ["GX0112348"] }

{ "signatureQualifier": "eu_eidas_qes",
  "key":  { "status": "enabled", "algo": ["1.2.840.10045.2.1"], "len": 256,
            "curve": "1.2.840.10045.3.1.7" },
  "cert": { "status": "valid", "certificates": ["MIIC…", "MIIC…"] },
  "auth": { "mode": "oauth2code" },
  "SCAL": "2",
  "multisign": 1 }
```

**Suite :** SCAL 2 signifie que l'autorisation devra être liée aux condensats à signer.

## 8.3 Préparer le condensat à signer

Application de signature → Application de signature · Condensat

### Entrée

Identique à la section 7, étapes 1 à 3.

**TEXTE**

```text
PDF avec /Contents réservé, signedAttrs construits avec le certificat qualifié
```

### Traitement

1.  Calculer h = SHA-256(DER(signedAttrs)) et l'encoder en base64url pour l'autorisation.

### Sortie

**TEXTE**

```text
hashes = "sTOgwOm-474gFj0q0x1iSNspKqbcse4IeiqlDg_HWuI"   -- exemple de valeur encodée
hashAlgorithmOID = 2.16.840.1.101.3.4.2.1
```

**Suite :** Ce condensat est présenté au titulaire pour autorisation.

## 8.4 Autoriser la signature de ce condensat précis

Signataire → Serveur d'autorisation du QTSP · Autorisation SCAL2

### Entrée

Redirection OAuth 2.0 de portée credential (CSC v2).

**HTTP**

```http
GET /oauth2/authorize?response_type=code
  &client_id=<SCA>
  &redirect_uri=https%3A%2F%2Fsca.example%2Fcb
  &scope=credential
  &credentialID=GX0112348
  &numSignatures=1
  &hashes=sTOgwOm-474gFj0q0x1iSNspKqbcse4IeiqlDg_HWuI
  &hashAlgorithmOID=2.16.840.1.101.3.4.2.1
  &code_challenge=…&code_challenge_method=S256
  &state=12345678 HTTP/1.1
Host: auth.qtsp.example
```

### Traitement

1.  Le titulaire s'authentifie auprès du prestataire avec deux facteurs (par exemple code et application mobile, ou PID du portefeuille).
2.  Le serveur lie l'autorisation à credentialID, au nombre de signatures et aux condensats.
3.  Le jeton obtenu après échange du code tient lieu de données d'activation (SAD).

### Sortie

Réponse du point token (exemple).

**JSON**

```json
{ "access_token": "4/CKN69L8gdSYp5_pwH3XlFQZ3ndFhkXf9P2_TiHRG-bA",
  "token_type": "Bearer", "expires_in": 300 }
```

**NOTE.** Variante explicite de l'API : POST /csc/v2/credentials/authorize avec authData, qui renvoie { "SAD": "…" } à passer ensuite à signHash.

**Suite :** Ce jeton, inutilisable pour un autre condensat, autorise l'appel signHash.

## 8.5 Faire signer le condensat dans le QSCD distant

Application de signature → Service de signature du QTSP · signHash

### Entrée

Requête CSC v2.

**HTTP**

```http
POST /csc/v2/signatures/signHash HTTP/1.1
Host: api.qtsp.example
Authorization: Bearer 4/CKN69L8gdSYp5_pwH3XlFQZ3ndFhkXf9P2_TiHRG-bA
Content-Type: application/json

{
  "credentialID": "GX0112348",
  "hashes": ["sTOgwOm-474gFj0q0x1iSNspKqbcse4IeiqlDg_HWuI"],
  "hashAlgorithmOID": "2.16.840.1.101.3.4.2.1",
  "signAlgo": "1.2.840.10045.4.3.2"
}
```

### Traitement

1.  Le SAM vérifie, dans son périmètre certifié, que les données d'activation correspondent à cette clé et à ce condensat.
2.  Il active la clé dans le HSM pour une opération ; le HSM signe en ECDSA P-256.
3.  Le prestataire journalise l'opération.

### Sortie

Réponse.

**JSON**

```json
{ "signatures": ["MEUCIQDqH…AiB3x…"] }    -- ECDSA-Sig-Value DER, en base64
```

**BASE LÉGALE.** C'est ici que se joue le contrôle exclusif de l'article 26 et du considérant 51 : il est garanti par l'évaluation du SAM (EN 419 241-2) et du HSM (EN 419 221-5), et non par une preuve cryptographique que le destinataire pourrait vérifier.

**Suite :** L'application insère la signature dans le CMS (section 7, étape 6) avec le certificat qualifié.

## 8.6 Obtenir une signature qualifiée

Application de signature → Application de signature · QES

### Entrée

**CMS · RFC 5652**

```text
SignerInfo.signature = signature reçue
certificates = [certificat qualifié, AC qualifiée]
```

### Traitement

1.  Même structure que la section 7 ; seuls le certificat et le dispositif changent.

### Sortie

**TEXTE**

```text
PAdES B-B : signature électronique qualifiée, sous réserve de validation (section 10)
```

**Suite :** Pour durer, la signature doit être horodatée et enrichie de ses preuves de validité (section 9).

## Sources

-   [Règlement d'exécution (UE) 2025/1943 (certificats qualifiés, annexe I)](https://eur-lex.europa.eu/eli/reg_impl/2025/1943/oj/fra)
-   [Cloud Signature Consortium, API v2.0.0.2](https://cloudsignatureconsortium.org/wp-content/uploads/2023/04/csc-api-v2.0.0.2.pdf)
-   [Buypass, exemples réels de l'API CSC v2](https://buypassdev.atlassian.net/wiki/spaces/DEVSPACE/pages/3400237057/BCSS+-+person+signing+Role+of+Signature+Creation+Application+Service+Provider+SCASP)
-   [EN 419 241-2:2019, profil de protection du QSCD serveur](https://standards.iteh.ai/catalog/standards/cen/6161a882-7bd0-4450-a2ca-bf20251d6382/en-419241-2-2019)
-   [Cryptomathic, SAM et HSM dans un QSCD distant](https://www.cryptomathic.com/news-events/blog/eidas-qualified-remote-signing-exploring-en-419-241-2-certified-qualified-signature-creation-devices)
-   [Commission, liste des QSCD notifiés](https://eidas.ec.europa.eu/efda/browse/notification/qscd-sscd)
