Coinbase, the company supporting the eponymous digital currency exchange platform, announced the opening of the source texts of the cryptographic library Kryptology , which offers a set of cryptographic algorithms for use in distributed systems in which encryption and authentication is carried out with the involvement of several participants. The code is written in the Go language and is distributed under the Apache 2.0 license.
It is noted that the library code has passed a security audit, and the API was developed with an eye on simplicity and protection from accidental errors or incorrect use that can lead to a decrease in the stability of the implemented mechanisms. The development also took into account the typical problems that Coinbase had to face.
The library includes:
- Implementation of Shamir’s secret sharing scheme , which allows sharing a secret message between N-parties, so that any K parties (K ≤ N) can jointly recover the complete message, but the data from K-1 parties is not enough to obtain any information about the original message. As a practical application of the method, multi-user authorization systems are mentioned, in which a certain number of people must be present to gain access, and each individually cannot be authorized, as well as biometric authentication systems.
- Threshold implementations of the Elliptic Curve Digital Signature Algorithm (ECDSA) – GG20 and DKLs18 , which propose private key sharing schemes for the joint generation of digital signatures, requiring a minimum number of shared key holders to participate in the signature creation process.
- Tools for distributed key generation BLS DKG and ed25119 DKG , allowing the computation of the public and private keys to be split between multiple parties, so that keys can only be generated when working together, neither party has access to the private keys, and compromising one of the parties does not threaten the entire system.
- Implementation of verifiable cryptography algorithms Camshoup and ElGamal , solving the problem of confirming that the transmitted ciphertext was encrypted with a given public key, without providing a decryption key.