Replies: 3 comments 6 replies
-
I think we should write this as an abstraction layer with the first "backends" to be implemented being local files and KMS. If you agree, maybe let's sketch some type-level programming for that.
How would you generalize challenge-response auth? |
Beta Was this translation helpful? Give feedback.
-
The only secret that a Suzuka node currently needs to operate seems to be the MCR signing key. The signing API for Ethereum is already abstracted by alloy-signer, with backends available for in-memory local keys, AWS KMS, and other signer implementations. We only need to adapt the client and configuration to be able to use any other backends we decide to support. |
Beta Was this translation helpful? Give feedback.
-
The API for asynchronous signers can be a synthesis of essential parts of alloy-signer (for which it could be a backend) and async-signature API. /// Signature error, deliberately opaque to prevent side-channel leakage
pub struct Error {
// ...
}
/// A possibly remote agent that signs messages with a digital signature.
pub trait Signer<Signature> {
/// The type of the public key that can be used to verify the signatures.
type PublicKey: Verifier<Signature>;
/// Returns the public key used by the signer.
/// The signer entity must have been initialized and its public key interrogated
/// before this API is available.
fn public_key(&self) -> Result<Self::PublicKey, Error>;
/// Signs the message.
async fn sign(&self, msg: &[u8]) -> Result<Signature, Error>;
} |
Beta Was this translation helpful? Give feedback.
-
At the bare minimum, we need a way to provision node's secret keys in a way that is not easily available for inspection with common system tools, such as an environment variable or a command-line option value. To allow future security enhancements, out-of-process secret management should be supported.
Alternatives
Open Question: Check if this is mitigated by container tools: if we can run the node in deployment such that the container runner sets an environment variable from a source that is not available for inspection by unauthorized parties, this solves our current problem.
Still, in-process management of secrets is weak security in the long term.
Use of secrets
See also #435 and MIP-1.
Aptos
A signing key is used to:
Secure out-of-process signing is therefore not required for mainnet operations, but would be nice to have for development and the testnet.
Celestia
A private key is generated by the
cel-key
utility and is used to obtain an auth token from the API. The utility support multiple backends, mostly based on local files. Theos
backend integrates with the OS key management (to be clarified).We need to start signing blob content. The API and choice of key algorithms is entirely under our control.
MCR settlement
The MCR signing key is used to sign Eth transaction. The signing API for Ethereum is already extensibly abstracted by alloy-signer, with backends available for in-memory local keys, AWS KMS, YubiHSM, and other signer implementations.
API design
The API should support out-of-process private keys with challenge-response auth.
The MVP features
Backends for:
Beta Was this translation helpful? Give feedback.
All reactions