Compare commits
8 Commits
59cf8bd7b8
...
241c45d390
Author | SHA1 | Date |
---|---|---|
|
241c45d390 | |
|
6723833a28 | |
|
0a1594a630 | |
|
5cde2bfe31 | |
|
a79d44c912 | |
|
48344d5de8 | |
|
169162303c | |
|
77891a686c |
|
@ -63,12 +63,8 @@ Some options include:
|
||||||
|
|
||||||
* NitroKey 3
|
* NitroKey 3
|
||||||
|
|
||||||
* Solo Key
|
|
||||||
|
|
||||||
* YubiKey 5
|
* YubiKey 5
|
||||||
|
|
||||||
* Librem Key
|
|
||||||
|
|
||||||
// ANCHOR_END: smart-cards
|
// ANCHOR_END: smart-cards
|
||||||
|
|
||||||
## Tamper Proofing
|
## Tamper Proofing
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
/* ANCHOR: all */
|
||||||
|
# Linux Workstation (Online Machine)
|
||||||
|
// ANCHOR: content
|
||||||
|
* Linux Workstation (online machine)
|
||||||
|
* Any internet connected computer with a Linux shell will suffice
|
||||||
|
// ANCHOR_END: content
|
||||||
|
/* ANCHOR_END: all */
|
|
@ -23,7 +23,7 @@ as such need to be set up in a manner that minimizes exposure risks.
|
||||||
```
|
```
|
||||||
b. Test the variable was set correctly
|
b. Test the variable was set correctly
|
||||||
```
|
```
|
||||||
$ echo $card_id`
|
$ echo $card_id
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Set the smart card to require touch for all operations
|
1. Set the smart card to require touch for all operations
|
||||||
|
@ -36,10 +36,16 @@ as such need to be set up in a manner that minimizes exposure risks.
|
||||||
```
|
```
|
||||||
Note: default admin PIN is 12345678
|
Note: default admin PIN is 12345678
|
||||||
|
|
||||||
|
1. Set expiry time via environment variable - you can update 2y to desired value:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ export KEYFORK_OPENPGP_EXPIRE=2y
|
||||||
|
```
|
||||||
|
|
||||||
1. Generate a mnemonic, encrypting to a newly-generated key:
|
1. Generate a mnemonic, encrypting to a newly-generated key:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ keyfork mnemonic generate --encrypt-to-self public.asc,output=private.asc --provision openpgp-card,identifier="$card_id"
|
$ keyfork mnemonic generate --encrypt-to-self public.asc,output=encrypted.asc --provision openpgp-card,identifier="$card_id"
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: The PIN can't use sequential numbers, characters or repeated patterns.
|
Note: The PIN can't use sequential numbers, characters or repeated patterns.
|
||||||
|
@ -49,7 +55,7 @@ as such need to be set up in a manner that minimizes exposure risks.
|
||||||
```
|
```
|
||||||
$ fingerprint="$(sq keyring cert.asc | awk '{ print $2 }')"
|
$ fingerprint="$(sq keyring cert.asc | awk '{ print $2 }')"
|
||||||
$ mv public.asc "${fingerprint}.pub.asc"
|
$ mv public.asc "${fingerprint}.pub.asc"
|
||||||
$ mv private.asc "${fingerprint}.prv.asc"
|
$ mv encrypted.asc "${fingerprint}.enc.asc"
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Optional: Create duplicate smartcards.
|
1. Optional: Create duplicate smartcards.
|
||||||
|
@ -58,7 +64,7 @@ as such need to be set up in a manner that minimizes exposure risks.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ gpg --import *.pub.asc
|
$ gpg --import *.pub.asc
|
||||||
$ gpg --decrypt *.prv.asc | KEYFORK_PROMPT_TYPE=headless keyfork recover mnemonic --daemon
|
$ gpg --decrypt $fingerprint.enc.asc | KEYFORK_PROMPT_TYPE=headless keyfork recover mnemonic --daemon
|
||||||
$ keyfork provision openpgp-card --identifier "$(oct list -i | head -1)" --account-id 0
|
$ keyfork provision openpgp-card --identifier "$(oct list -i | head -1)" --account-id 0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -10,21 +10,20 @@
|
||||||
* Provided by [AirGapped Bundle](../level-2/fixed-location/provisioner/air-gapped-bundle.md)
|
* Provided by [AirGapped Bundle](../level-2/fixed-location/provisioner/air-gapped-bundle.md)
|
||||||
* Alternative: Computer that can load AirgapOS ([compatibility reference](https://git.distrust.co/public/airgap#tested-models))
|
* Alternative: Computer that can load AirgapOS ([compatibility reference](https://git.distrust.co/public/airgap#tested-models))
|
||||||
|
|
||||||
* Linux Workstation
|
{{ #include ../../component-documents/linux-workstation.md:content }}
|
||||||
* Any internet connected Linux shell will suffice
|
|
||||||
|
|
||||||
* 1 New Smart Card
|
* 1+ Smart Card
|
||||||
* Nitrokey Pro 3+ or Yubikey 5+
|
* At least 1 primary smart card
|
||||||
|
* Any number of backup smart cards
|
||||||
|
|
||||||
* 1 Transfer SD card
|
* 1 Transfer SD card
|
||||||
* Document will assume volume label is TRANSFER
|
* Document will assume the card is labelled as "TRANSFER"
|
||||||
* Brand and size does not matter
|
|
||||||
|
|
||||||
## Process
|
## Process
|
||||||
|
|
||||||
**Note: Most steps will simplified to a single command in a future iteration**
|
**Note: Most steps will simplified to a single command in a future iteration**
|
||||||
|
|
||||||
**See: [keyfork#73](https://git.distrust.co/public/keyfork/issues/73), [keyfork#74](https://git.distrust.co/public/keyfork/issues/74), [keyfork#76](https://git.distrust.co/public/keyfork/issues/76), [keyfork#77](https://git.distrust.co/public/keyfork/issues/77), [keyfork#78](https://git.distrust.co/public/keyfork/issues/78)**
|
**See: [keyfork#73](https://git.distrust.co/public/keyfork/issues/73), [keyfork#74](https://git.distrust.co/public/keyfork/issues/74), [keyfork#77](https://git.distrust.co/public/keyfork/issues/77)**
|
||||||
|
|
||||||
1. If using pre-sealed Cold Bundle unseal as follows:
|
1. If using pre-sealed Cold Bundle unseal as follows:
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
* [Personal PGP Keys](/key-types.html#personal-pgp-keypair)
|
* [Personal PGP Keys](/key-types.html#personal-pgp-keypair)
|
||||||
|
|
||||||
* Online computer
|
{{ #include ../../../../component-documents/linux-workstation.md:content }}
|
||||||
|
|
||||||
## Procedure
|
## Procedure
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
{{ #include ../../../../operator-requirements.md:requirements }}
|
{{ #include ../../../../operator-requirements.md:requirements }}
|
||||||
|
|
||||||
* Online machine
|
{{ #include ../../../../../../component-documents/linux-workstation.md:content }}
|
||||||
|
|
||||||
* [High Visibility Storage](TODO): plastic container or bag that's used to keep items while not in use in a visible location like the middle of a desk.
|
* [High Visibility Storage](TODO): plastic container or bag that's used to keep items while not in use in a visible location like the middle of a desk.
|
||||||
|
|
||||||
|
@ -75,6 +75,7 @@
|
||||||
1. Generate a new address:
|
1. Generate a new address:
|
||||||
|
|
||||||
* `icepick workflow sol generate-address --account $account_id | jq -r .pubkey > $account_id.txt`
|
* `icepick workflow sol generate-address --account $account_id | jq -r .pubkey > $account_id.txt`
|
||||||
|
* [38 removes need to use jq](https://git.distrust.co/public/icepick/issues/38)
|
||||||
|
|
||||||
1. Sign the file using:
|
1. Sign the file using:
|
||||||
|
|
||||||
|
@ -148,7 +149,8 @@
|
||||||
|
|
||||||
* `export ICEPICK_CONFIG_FILE=<path_to_icepick_repositry>/icepick.toml`
|
* `export ICEPICK_CONFIG_FILE=<path_to_icepick_repositry>/icepick.toml`
|
||||||
|
|
||||||
* `icepick workflow sol generate-nonce-account --cluster <cluster> --authorization-address "$(cat $account_id.txt)" | jq -r .nonce_account > $account_id-na.txt`
|
* `icepick workflow sol generate-nonce-account --authorization-address "$(cat $account_id.txt)" | jq -r .nonce_account > $account_id-na.txt`
|
||||||
|
* [38 removes he need to use jq and cat](https://git.distrust.co/public/icepick/issues/38)
|
||||||
|
|
||||||
* Repeat command if returned message is "The transaction was possibly not received by the cluster."
|
* Repeat command if returned message is "The transaction was possibly not received by the cluster."
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
* Set the nonce address variable:
|
* Set the nonce address variable:
|
||||||
|
|
||||||
* `nonce_address=$"(cat vaults/<namespace>/<coin>/<account_id>-na.txt)"`
|
* `nonce_address="$(cat vaults/<namespace>/<coin>/<account_id>-na.txt)"`
|
||||||
|
|
||||||
1. Set `ICEPICK_DATA_DIRECTORY`:
|
1. Set `ICEPICK_DATA_DIRECTORY`:
|
||||||
|
|
||||||
|
@ -50,9 +50,7 @@
|
||||||
|
|
||||||
* `export ICEPICK_CONFIG_FILE=<path_to_icepick_repo>/icepick.toml`
|
* `export ICEPICK_CONFIG_FILE=<path_to_icepick_repo>/icepick.toml`
|
||||||
|
|
||||||
1. Run the command: `icepick workflow sol broadcast --cluster <cluster> --nonce-address=$nonce_address`
|
1. Run the command: `icepick workflow sol broadcast --nonce-address=$nonce_address`
|
||||||
|
|
||||||
* Available clusters are `devnet`, `testnet` and `mainnet-beta`
|
|
||||||
|
|
||||||
* Await completion message before removing Ceremony SD card
|
* Await completion message before removing Ceremony SD card
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Procedure for importing an arbitrary secret (raw key, mnemonic, state secrets) i
|
||||||
|
|
||||||
1. Encrypt the secret to certificate:
|
1. Encrypt the secret to certificate:
|
||||||
|
|
||||||
* `sq encrypt --for-file <certificate> <file_to_encrypt> --output encrypted.asc` TODO: sq needs to be added to airgapOS
|
* `sq encrypt --for-file <certificate> <file_to_encrypt> --output encrypted.asc`
|
||||||
|
|
||||||
1. Once encrypted, name the file appropriately and add it to an `artifacts/` directory in the appropriate namespace subdirectory in the `vaults` repository
|
1. Once encrypted, name the file appropriately and add it to an `artifacts/` directory in the appropriate namespace subdirectory in the `vaults` repository
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,7 @@ This is a ceremony for generating and sharding entropy to a set of existing Quor
|
||||||
|
|
||||||
* Replace the values: <path_to_input_shard>
|
* Replace the values: <path_to_input_shard>
|
||||||
|
|
||||||
* `keyfork mnemonic generate --shard-to <path_to_input_shard>,output=shardfile.asc`
|
* `keyfork mnemonic generate --shard-to <path_to_input_shard>,output=shardfile.asc --encrypto-to-self encryption_certificate.asc,userid=<namespace>`
|
||||||
|
|
||||||
* TODO - NOT IMPLEMENTED: `--derive-openpgp-cert encryption_cert.new.asc,userid=<user_id>`
|
|
||||||
|
|
||||||
1. Unseal an SD card pack
|
1. Unseal an SD card pack
|
||||||
|
|
||||||
|
@ -42,7 +40,7 @@ This is a ceremony for generating and sharding entropy to a set of existing Quor
|
||||||
|
|
||||||
* Back up the root OpenPGP certificate
|
* Back up the root OpenPGP certificate
|
||||||
|
|
||||||
* `cp encryption_cert.asc /media/vaults/<namespace>/`
|
* `cp encryption_certificate.asc /media/vaults/<namespace>/`
|
||||||
|
|
||||||
1. Copy the contents of Ceremony SD card to machine
|
1. Copy the contents of Ceremony SD card to machine
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ The proposer must combine these values into a JSON file, such as:
|
||||||
|
|
||||||
* The proposer should verify the commit signatures of the photographs they are printing against a list of permitted PGP keys found in the `vaults` repo
|
* The proposer should verify the commit signatures of the photographs they are printing against a list of permitted PGP keys found in the `vaults` repo
|
||||||
|
|
||||||
* Online Machine
|
{{ #include ../../../../component-documents/linux-workstation.md:content }}
|
||||||
|
|
||||||
* Clone the [Vaults Repository](../../../all-levels/create-vaults-repository.md) for your organization to the machine
|
* Clone the [Vaults Repository](../../../all-levels/create-vaults-repository.md) for your organization to the machine
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ The proposer must combine these values into a JSON file, such as:
|
||||||
|
|
||||||
* e.g `icepick workflow cosmos withdraw-rewards --delegate-address kyve1q9w3nar74up6mxnwd428wpr5nffcw3360tkxer --validator-address kyvevaloper1ghpmzfuggm7vcruyhfzrczl4aczy8gas8guslh --chain-name korellia --export-for-quorum --sign > <namespace>/ceremonies/<date>/payloads/payload_<num>.json`
|
* e.g `icepick workflow cosmos withdraw-rewards --delegate-address kyve1q9w3nar74up6mxnwd428wpr5nffcw3360tkxer --validator-address kyvevaloper1ghpmzfuggm7vcruyhfzrczl4aczy8gas8guslh --chain-name korellia --export-for-quorum --sign > <namespace>/ceremonies/<date>/payloads/payload_<num>.json`
|
||||||
|
|
||||||
* e.g `icepick workflow sol transfer --from-address "$(cat <namespace>/<coin>/0.txt)" --to-address "$(cat to_address.txt) --amount <amount> --export-for-quorum --sign > <namespace>/ceremonies/<date>/payloads/payload_<num>.json`
|
* e.g `icepick workflow sol transfer --from-address "$(cat <namespace>/<coin>/0.txt)" --to-address "$(cat to_address.txt)" --amount <amount> --export-for-quorum --sign > <namespace>/ceremonies/<date>/payloads/payload_<num>.json`
|
||||||
|
|
||||||
1. Copy the updated ceremonies repo to the SD card
|
1. Copy the updated ceremonies repo to the SD card
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,6 @@
|
||||||
|
|
||||||
* Computers which are compatible which can be verified via [this guide](https://git.distrust.co/public/airgap#hardware-compatibility)
|
* Computers which are compatible which can be verified via [this guide](https://git.distrust.co/public/airgap#hardware-compatibility)
|
||||||
|
|
||||||
* Online Use: Chromebook or QubesOS laptop
|
|
||||||
|
|
||||||
// ANCHOR_END: computer-models
|
// ANCHOR_END: computer-models
|
||||||
|
|
||||||
## Digital Camera
|
## Digital Camera
|
||||||
|
|
|
@ -8,9 +8,15 @@
|
||||||
|
|
||||||
* The operators should verify the commit signatures of the photographs they are printing against a list of permitted PGP keys found in the "ceremonies" repo
|
* The operators should verify the commit signatures of the photographs they are printing against a list of permitted PGP keys found in the "ceremonies" repo
|
||||||
|
|
||||||
* [Air-gapped bundle](/generated-documents/level-2/fixed-location/provisioner/air-gapped-bundle.md)
|
* [AirgapOS SD card](/generated-documents/level-2/fixed-location/provisioner/provision-airgapos.md)
|
||||||
|
* Provided by [AirGapped Bundle](/generated-documents/level-2/fixed-location/provisioner/air-gapped-bundle.md)
|
||||||
|
* Alternative: Create your own from documentation in [AirgapOS Repository](https://git.distrust.co/public/airgap)
|
||||||
|
|
||||||
* Minimum of 2 [Operators](/system-roles.md#operator)
|
* AirgapOS Laptop
|
||||||
|
* Provided by [AirGapped Bundle](/generated-documents/level-2/fixed-location/provisioner/air-gapped-bundle.md)
|
||||||
|
* Alternative: Computer that can load AirgapOS ([compatibility reference](https://git.distrust.co/public/airgap#tested-models))
|
||||||
|
|
||||||
|
* Minimum of 1 [Operator](/system-roles.md#operator) and 1 [Witness](/system-roles.md#witness)
|
||||||
|
|
||||||
* [Personal PGP key pair](/key-types.md#personal-pgp-keypair) for each operator
|
* [Personal PGP key pair](/key-types.md#personal-pgp-keypair) for each operator
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue