Score:1

Standardized names of cryptographic algorithms

cn flag

I am using micro-services to interact between various cryptographic technologies like HSMs, keystores, vaults, etc., that are written in different languages. Usually, each technology, or even vendor, is using different names of the cryptographic algorithms, and in some cases they are also case-sensitive.

For example, Java Security Standard Algorithm Names contains different algorithm names as JSON Object Signing and Encryption (JOSE).

Another thing is that the list of algorithms are expanding, especially with the adoption of quantum-safe cryptography.

In my case, it is important to have one consistent list of names of cryptographic algorithms that can be translated for each technology. Otherwise I am not able to interact between them as there will be conflicts in the names.

Is there any internationally recognized standard that lists cryptographic algorithm names or identifiers that can be consistently used programmatically and I can refer to? (is there something in NIST, or ISO?)

kodlu avatar
sa flag
I am unsure if such a list exists, it will neither be universal [covering everything of practical interest] nor stable over time. This sounds like something you should be doing. Note that there may be naming conventions within ISO or NIST that go part of the way. Also, not my strength, but is HSM a "technology"? You may need to think about defining your terms
Score:2
in flag

Even if the names are specified in a standard, then they are often not used. See e.g. the RSA algorithm names in PKCS#1 v2.x or the cipher suites with OpenSSL specific names next to the ones in the RFC. There are also naming conventions in various programming languages. Basically, the answer is no.

Probably the closest you can come is the OID scheme that is used for more common algorithms. See for instance this page where the various SHA hash algorithms are listed by OID. Similarly, there are OID's for RSA as well. However, the OID registry is far from complete, and it may contain duplicates.

Note too that OID's are generally used within ASN.1 AlgorithmIdentifier, see the definition below:

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

Here the OBJECT IDENTIFIER is where the OID is placed. Although many algorithms have NULL as parameters, others will have a set of configuration parameters. This is why there isn't a hash-specific RSA OID mentioned in the list shown before.

Note that the OID registry is hierarchical. So an organization such as NIST can use their own registry (e.g. the CSOR for the SHA-1 hash algorithms) to indicate a standardized algorithm.

Some libraries and frameworks such as Java JCA have an aliasing scheme where algorithms can be retrieved both by name and by OID. Many other cryptographic libraries only work with algorithms by name though. If libraries support OID's then they normally use the "dot notation" rather than the full notation (e.g. 1.2.840.113549.1.1.11 rather than the full OID {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) sha256WithRSAEncryption(11)}).

I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.