Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Encryption and decryption is performed directly by scripts that can be used outside of JS7 products or by related jobs.
  • No JS7 product is directly involved in encryption/decryption as otherwise the JS7 product would know the keys involved that potentially could be compromised by logging, database persistence etc.
  • Performing encryption/decryption by jobs limits the attack surface to the OS process executing the job. The job implementation is controlled by the user who can verify secure operation.

Asymmetric Keys

The basic proceeding works Encryption and decryption use asymmetric keys like this:

Encryption

Graphviz
templateGraphvizSubgraphs
digraph structs {
    compound=true;
    rankdir=LR;

   
Flowchart
# Secret [label="   Secret   "   Secret   ",style="filled",fillcolor="lightskyblue"]
#    Encrypted_Secret [label="   Encrypted Secret   ",fillcolor="red"]
#   Encrypted Secret   ",style="filled",fillcolor="dodgerblue"]
    Certificate [shape="ellipse",label="Certificate / Public Key",style="filled",fillcolor="orange"]

    Encrypt [shape="rectangle",label="Script\njs7_encrypt.sh | .cmd",fontname="Arial",fontsize="10pt",style="filled",fillcolor="white"] 

    subgraph encrypt {
        label = "\n............................................. Encrypt .............................................\n\n";
        fontname="Arial";
        fontsize="12pt";

        Secret -> Encrypt; 
        Certificate -> Encrypt;
        Encrypt -> Encrypted_Secret [label="encrypt",fontname="Arial",fontsize="10pt"]; 
    }
}

Decryption

Graphviz
templateGraphvizSubgraphs
digraph structs {
    compound=true;
    rankdir=LR;

    Encrypted_Secret [label="   Encrypted Secret   ",style="filled",fillcolor="dodgerblue"]
    Decrypted_Secret [label="   Decrypted Secret     Secret  ",style="filled",fillcolor="lightgreenlightskyblue"]

#    PrivateKey [shape="ellipse",label="Private Key",style="filled",fillcolor="orange"]
# Certificate
    Decrypt [shape="ellipserectangle",label="Certificate / Public KeyScript\njs7_decrypt.sh | .cmd",fontname="Arial",fontsize="10pt",style="filled",fillcolor="limegreenwhite"] 

# Secret -> Certificate [label=" encrypt "] -> Encrypted_Secret

# Encrypted_Secret -> PrivateKey [label=" decrypt "] -> Decrypted_Secret
 
      subgraph decrypt {
        label = "\n............................................. Decrypt .............................................\n\n";
        fontname="Arial";
        fontsize="12pt";

        Encrypted_Secret -> Decrypt;
        PrivateKey -> Decrypt;
        Decrypt -> Decrypted_Secret [label="decrypt",fontname="Arial",fontsize="10pt"];
    }
}


The basic proceeding works like this:

  • Consider the parties involved and related use cases:
    • A job executed on Agent A should be parameterized by a variable holding a secret.
    • A job executed on Agent B retrieves a secret that should be forwarded to a job on Agent A and possibly to other Agents too.
  • Use of asymmetric keys allows 
    • to create and to store a private key on Agent A.
    • to use Agent A's public key on Agent B or any other system involved.
    • to manage encryption and decryption like this:
      • create a symmetric one-time key and an encrypted copy of the key derived from Agent A's public key.
      • encrypt the value of a variable value with the one-time key.
      • drop the one-time key and forward the encrypted copy of the one-time key and the variable holding the encrypted value to Agent A.
      • only Agent A will be able to decrypt the encrypted one-time key using its private key which reveals the symmetric key required to decrypt the variable's value.

...