9.6. Domain Separation (Séparation de domaine)
9.6. Séparation de domaine
HPKE permet de combiner une variante DHKEM DHKEM(Group, KDF') et un KDF de sorte que les deux KDF soient instanciés par le même KDF. Par conception, les appels à Extract() et Expand() à l'intérieur de DHKEM et le reste de HPKE utilisent des domaines d'entrée séparés. Cela justifie de les modéliser comme des fonctions indépendantes même si elles sont instanciées par le même KDF. Cette séparation de domaine entre DHKEM et le reste de HPKE est réalisée en utilisant des ensembles de valeurs suite_id sans préfixe dans LabeledExtract() et LabeledExpand() (KEM... dans DHKEM et HPKE... dans le reste de HPKE). Rappelons qu'un ensemble est sans préfixe si aucun élément n'est un préfixe d'un autre dans l'ensemble.
Les instanciations futures de KEM DOIVENT garantir, si Extract() et Expand() sont utilisés en interne, qu'ils peuvent être modélisés comme des fonctions indépendantes des invocations de Extract() et Expand() dans le reste de HPKE. Une façon de garantir cela est d'utiliser LabeledExtract() et LabeledExpand() avec un suite_id tel que défini dans la Section 4, ce qui garantira la séparation du domaine d'entrée, comme indiqué ci-dessus. Une attention particulière doit être accordée si le KEM invoque directement des fonctions utilisées en interne dans Extract() ou Expand() de HPKE, telles que Hash() et HMAC() dans le cas de HKDF. Il DOIT être garanti que les entrées de ces invocations ne peuvent pas entrer en collision avec les entrées des invocations internes de ces fonctions à l'intérieur de Extract() ou Expand(). Dans KeySchedule() de HPKE, cela est évité en utilisant Extract() au lieu de Hash() sur les entrées de longueur arbitraire info et psk_id.
Le littéral de chaîne "HPKE-v1" utilisé dans LabeledExtract() et LabeledExpand() garantit que tous les secrets dérivés dans HPKE sont liés au nom et à la version du schéma, même lorsqu'ils sont éventuellement dérivés du même secret partagé Diffie-Hellman ou KEM que dans un autre schéma ou version.