You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+29-29Lines changed: 29 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ Advanced wallets operate in two modes:
16
16
Key features include:
17
17
18
18
-**Complete Infrastructure Control** - Host and manage all components in your own secure environment.
19
-
-**KMS/HSM Integration** - Bring your own KMS or HSM by implementing the provided [KMS API interface specification](./kms-api-spec.yaml). Reference implementations available for [AWS HSM](./demo-kms-script/aws-interface.md) and [Dinamo HSM](./demo-kms-script/dinamo-interface.md).
19
+
-**KMS/HSM Integration** - Bring your own KMS or HSM by implementing the provided [advanced wallets key provider API interface specification](./key-provider-api-spec.yaml). Reference implementations available for [AWS HSM](./demo-key-provider-script/aws-interface.md) and [Dinamo HSM](./demo-key-provider-script/dinamo-interface.md).
20
20
-**Network Isolation** - Advanced Wallet Manager operates in a completely isolated network segment with no external internet access.
21
21
-**mTLS Security** - Optional mutual TLS with client certificate validation for secure inter-service communications.
22
22
-**Flexible Configuration** - Environment-based setup with file or variable-based certificates.
@@ -38,7 +38,7 @@ Key features include:
38
38
39
39
## Architecture
40
40
41
-
-**Advanced Wallet Manager** (Port 3080) - An isolated signing server with no internet access that only connects to your KMS API implementation for key operations.
41
+
-**Advanced Wallet Manager** (Port 3080) - An isolated signing server with no internet access that only connects to your key provider API implementation for key operations.
42
42
-**Master Express** (Port 3081) - An API gateway providing end-to-end wallet creation and transaction support, integrating [BitGo APIs](https://developers.bitgo.com/reference/overview#/) with secure communication to Advanced Wallet Manager.
43
43
44
44
## Installation
@@ -49,9 +49,9 @@ Key features include:
49
49
-**npm** or **yarn** package manager.
50
50
-**OpenSSL** for certificate generation.
51
51
-**Docker** and **Docker Compose** for containerized deployment (or you can use **Podman** as alternative to Docker).
52
-
-**KMS API Implementation** - You must implement the [KMS API interface specification](./kms-api-spec.yaml) to connect your KMS/HSM to the Advanced Wallet Manager. Reference implementations available:
-**key provider API implementation** - You must implement the [key provider API interface specification](./key-provider-api-spec.yaml) to connect your KMS/HSM to the Advanced Wallet Manager. Reference implementations available:
|`ADVANCED_WALLET_MANAGER_PORT`| Port to listen on |`3080`| ❌ |
171
-
|`KMS_URL`| URL to your KMS API implementation | - | ✅ |
171
+
|`KEY_PROVIDER_URL`| URL to your key provider API implementation | - | ✅ |
172
172
173
-
> **Note:** The `KMS_URL` points to your implementation of the KMS API interface. You must implement this interface to connect your KMS/HSM. See [Prerequisites](#prerequisites) for the specification and examples.
173
+
> **Note:** The `KEY_PROVIDER_URL` points to your implementation of the key provider API interface. You must implement this interface to connect your KMS/HSM. See [Prerequisites](#prerequisites) for the specification and examples.
174
174
175
175
### Master Express Settings
176
176
@@ -232,17 +232,17 @@ curl -X POST http://localhost:3081/ping/advancedWalletManager
232
232
|`AWM_SERVER_CA_CERT`| AWM server CA certificate (alternative) | PEM string |
> **Note:** For security reasons, when `TLS_MODE=mtls`, outbound client certificates are required and cannot reuse server certificates. When `TLS_MODE=disabled`, these certificates aren't required.
This document provides a reference implementation for integrating the 4 KMS API's with AWS HSM, covering the complete request-response flow from API handlers to HSM operations.
3
+
This document provides a reference implementation for integrating the 4 key provider API's with AWS HSM, covering the complete request-response flow from API handlers to HSM operations.
4
4
5
5
## ⚠️ Security Recommendation
6
6
7
-
For production KMS implementations, consider implementing the KMS-API in a C++ like language, because JavaScript does not support low-level memory management. Depending on your solution, direct memory management with explicit memory allocation/deallocation might be desirable.
7
+
For production key provider implementations, consider implementing the key provider API in a C++ like language, because JavaScript does not support low-level memory management. Depending on your solution, direct memory management with explicit memory allocation/deallocation might be desirable.
8
8
9
9
Also consider implementing low level cryptographic operations using low-level languages like C++ or Rust. They typically provide easier and more efficient data manipulation and transaformation.
10
10
@@ -14,7 +14,7 @@ When working with AWS HSM, adhere to their guidances and best practices for the
14
14
15
15
## API Overview
16
16
17
-
The KMS API provides secure key management through four main endpoints that integrate with AWS HSM:
17
+
The key provider API provides secure key management through four main endpoints that integrate with AWS HSM:
18
18
19
19
-`POST /key` - Store private keys using envelope encryption
20
20
-`GET /key/{pub}` - Retrieve private keys using envelope decryption
@@ -25,10 +25,10 @@ The KMS API provides secure key management through four main endpoints that inte
25
25
All 4 API's implementation should follow roughly the same dataflow as outlined bellow:
A KMS provider is the implementation of the code that is in charge of making the necessary calls to the HSM directly. You might have multiple providers in your solution, one for each 3rd party HSM that you wish to use, for example.
31
+
A key provider is the implementation of the code that is in charge of making the necessary calls to the HSM directly. You might have multiple providers in your solution, one for each 3rd party HSM that you wish to use, for example.
32
32
33
33
### Handler-to-Provider Mapping
34
34
@@ -41,10 +41,10 @@ A KMS provider is the implementation of the code that is in charge of making the
41
41
42
42
## Envelope Encryption Pattern (Recommended)
43
43
44
-
We recommend using a 3 level key encryption to store and protect the private keys of your advanced wallets.
45
-
The 3 levels consist of the root-level key from the KMS, 2nd level data keys generated by the root level key, and the 3rd level private keys used by your wallets directly.
44
+
We recommend using a 3 level key encryption to store and protect the private keys of your advanced wallets.
45
+
The 3 levels consist of the root-level key from the KMS/HSM, 2nd level data keys generated by the root level key, and the 3rd level private keys used by your wallets directly.
46
46
47
-
### Layer 1: KMS Keys (AWS HSM)
47
+
### Layer 1: Root Keys (AWS HSM)
48
48
-**Key spec**: `SYMMETRIC_DEFAULT`
49
49
-**Algorithm**: AES-256-GCM, used by keys generated using the specification `SYMMETRIC_DEFAULT`
50
50
-**Generation**: AWS HSM
@@ -67,7 +67,7 @@ The 3 levels consist of the root-level key from the KMS, 2nd level data keys gen
67
67
68
68
### Root Key Creation
69
69
70
-
This following needs to be only run once. The KMS should be functional with just one root-level key.
70
+
This following needs to be only run once. The key provider should be functional with just one root-level key.
**For production KMS implementations, consider implementing the KMS-API in a C++ like language, or use typed arrays like Uint8Array for all sensitive data because JavaScript does not support secure memory management.**
5
+
**For production key provider implementations, consider implementing the key provider API in a C++ like language, or use typed arrays like Uint8Array for all sensitive data because JavaScript does not support secure memory management.**
6
6
7
7
**Recommended Alternatives:**
8
8
-**C++/Rust**: Languages with explicit memory management and secure allocation
9
9
-**Node.js Typed Arrays**: Use `Uint8Array` for sensitive data with explicit zeroing
10
10
-**Native Addons**: Implement cryptographic operations in native C++ modules
11
11
-**Hardware Security**: Use HSM-backed secure memory when available
12
12
13
-
This document provides a reference implementation for integrating the 4 KMS API's with Dinamo HSM, covering the complete request-response flow from API handlers to HSM operations.
13
+
This document provides a reference implementation for integrating the 4 key provider API's with Dinamo HSM, covering the complete request-response flow from API handlers to HSM operations.
14
14
15
15
## Demo Scripts
16
16
@@ -20,7 +20,7 @@ This document provides a reference implementation for integrating the 4 KMS API'
20
20
21
21
## Quick Overview
22
22
23
-
The KMS API provides secure key management through four main endpoints that integrate with Dinamo HSM:
23
+
The key provider API provides secure key management through four main endpoints that integrate with Dinamo HSM:
24
24
25
25
-`POST /key` - Store private keys using envelope encryption
26
26
-`GET /key/{pub}` - Retrieve private keys using envelope decryption
@@ -30,7 +30,7 @@ The KMS API provides secure key management through four main endpoints that inte
0 commit comments