Crypto 프로세스(노드)

  • Crypto 기능을 통해 워크플로우 내에서 데이터를 안전하게 암호화, 복호화하고 해시 값을 생성하는 등의 암호화 작업을 수행할 수 있습니다.

  • 지원되는 주요 기능은 다음과 같습니다.

    • Hash 생성 : 지정된 알고리즘을 사용하여 데이터의 해시 값을 생성합니다. 해시는 주로 데이터의 무결성 검증이나 고유 식별자로 사용됩니다. 해시 함수는 단방향 함수로, 해시 값에서 원본 데이터를 복원할 수 없습니다.

    • HMAC 생성 : HMAC(Hash-based Message Authentication Code)은 비밀 키와 해시 함수를 사용하여 메시지의 무결성과 인증을 동시에 보장하는 방법입니다.

    • AES 암호화/복호화 : AES(Advanced Encryption Standard) 알고리즘을 사용하여 데이터를 암호화하거나 암호화된 데이터를 복호화합니다.

      • 키(Key)와 IV 길이: 선택한 알고리즘에 맞는 정확한 길이의 키와 IV를 사용해야 합니다. 길이가 맞지 않으면 오류가 발생합니다.

      • AES-128은 16byte, AES-256은 32byte의 키를 사용합니다.

      • GCM은 12byte의 IV를 사용하며, CBC, CTR 16byte의 IV를 사용합니다. ECB 모드는 IV를 사용하지 않습니다.

      • IV는 예측 불가능한 값(무작위 값 권장)을 사용해야 보안성이 높아집니다.

      • ECB 모드 사용 주의: ECB 모드는 보안에 매우 취약하므로, 패턴이 있는 데이터의 경우 암호화해도 패턴이 드러날 수 있습니다. 특별한 경우가 아니라면 GCM 또는 CBC, CTR 모드 사용을 강력히 권장합니다.

    • 복호화: 암호화 시 사용했던 알고리즘, 키, IV, 인코딩 방식을 정확히 동일하게 사용해야 정상적으로 복호화됩니다.

  • AES 암/복호화

    • 지원되는 알고리즘: aes-128-cbc, aes-128-ctr, aes-128-ecb, aes-128-gcm, aes-256-cbc, aes-256-ctr, aes-256-ecb, aes-256-gcm

    • gcm은 12byte의 IV를 사용하며, cbc, ctr은 16byte의 IV를 사용합니다.

    • aes-128은 16byte, aes-256은 32byte의 키를 사용합니다.

    • ecb는 IV를 사용하지 않습니다.

    • 지원되는 인코딩: BASE64, BASE64URL, HEX

    • 함수 사용 예제

    - ${_crypto.aesEncrypt('aes-128-cbc', '1234567890abcdef', '1234567890abcdef', 'hello world! AES test' , 'BASE64')} //algorithm, key, IV, data, encoding
    - ${_crypto.aesDecrypt('aes-128-cbc', '1234567890abcdef', '1234567890abcdef', 'VNNcilaX3Kwx18uWAOxj131D+TJC+bClZkphy9Uc7uE=', 'BASE64' )} //algorithm, key, IV, data, encoding
    - ${_crypto.aesEncrypt('aes-128-ecb', '1234567890abcdef', '', 'hello world! AES test' , 'BASE64')}
    - ${_crypto.aesDecrypt('aes-128-ecb', '1234567890abcdef', '', 'pthuu1WOb4pEFRhiP0JWfyozLaP2pIU/jPmxN+HgudU=' , 'BASE64')}
    - ${_crypto.aesDecrypt('aes-128-ecb', '1234567890abcdef', '', ${this.data} , 'BASE64')} //함수에 인자값으로 변수를 사용하는 경우 쿼테이션을 사용하면 안된다. 쿼테이션(싱글 또는 더블)을 사용할 경우 문자열로 인식한다.
    
  • Hash

    • 지원되는 알고리즘: MD5, SHA256, SHA384, SHA512, SHA3-256, SHA3-384, SHA3-512

    • 지원되는 인코딩: BASE64, BASE64URL, HEX

    • 함수 사용 예제

    - ${_crypto.hash('MD5', 'hello world! hash test', 'BASE64')} //algorithm, data, encoding
    - ${_crypto.hash('MD5', 'hello world! hash test', 'HEX')} //algorithm, data, encoding
    
  • HMAC

    • 지원되는 알고리즘: MD5, SHA256, SHA384, SHA512, SHA3-256, SHA3-384, SHA3-512

    • 지원되는 인코딩: BASE64, BASE64URL, HEX

    • 함수 사용 예제

    - ${_crypto.hmac('SHA256', '1234567890abcdef', 'hello world! hmac test', 'BASE64')}  //algorithm, Secret Key, data, encoding