見出し画像

【Teradata】ハッシュ化&暗号化

個人情報を含むデータを取り扱う時などに公開サーバーにアップする前に
ハッシュ化もしくは暗号化が必要になります。
その際に使用する関数について説明します。


1.ハッシュ化

ハッシュ化とは

ハッシュ化とは、データを固定長の文字列に変換するプロセスです。この文字列は、元のデータから一意に生成され、データの内容が少しでも変わるとハッシュ値も大きく変わります。ハッシュ化は一方向性の変換であり、元のデータをハッシュ値から復元することはできないものです。

ハッシュ化の特徴

  1. 固定長出力:入力データの長さに関わらず、ハッシュ関数は常に固定長のハッシュ値を生成します。

  2. 一意性:異なる入力データは異なるハッシュ値を生成します。同じ入力データは常に同じハッシュ値を生成します。

  3. 一方向性:ハッシュ値から元のデータを復元することはできません。これが暗号化との大きな違いです。

  4. 高速性:ハッシュ関数は通常、高速に計算できるように設計されています。

HASHROW関数を使用したハッシュ化

HASHROW関数を使用した例で説明します。
以下の例では、「ID」という項目名で[123456789]の数字を入れて作成した
テーブル「A」をもとにハッシュ化し、新たにテーブル「A_Hash」を作成します。

①事前にテーブル「A」を作成

CREATE TABLE A AS(
SELECT 123456789 AS ID
) WITH DATA;

HASHROW関数を使用してハッシュ化

HASHROW関数は、行全体または特定のカラムのハッシュ値を生成します。HASHROW関数はバイナリデータを返すため、必要に応じてFROM_BYTES関数を使用して文字列に変換します。

CREATE TABLE A_Hash AS (
SELECT
ID,
FROM_BYTES(HASHROW(ID), 'Base16') AS HASHED_ID
FROM A
) WITH DATA;
作成されたデータ

ID:INTEGER
HASHED_ID:VARCHAR形式

2.暗号化

暗号化とは

暗号化とは、データを特定のアルゴリズムを使用して変換し、第三者がそのデータを理解できないようにするプロセスです。暗号化されたデータは、元のデータ(平文)を特定のキーを使用して変換したものであり、復号化(デクリプション)によって元のデータに戻すことができます。

暗号化の特徴

  1. 可逆性:暗号化されたデータは、適切なキーを使用して復号化することができます。これがハッシュ化との大きな違いです。

  2. セキュリティ:暗号化は、データの機密性を保護するために使用されます。暗号化されたデータは、キーがなければ理解することができません。

  3. アルゴリズム:暗号化には対称鍵暗号と公開鍵暗号の2つの主要な種類があります。

暗号化の種類

  1. 対称鍵暗号

    • 特徴:暗号化と復号化に同じ鍵を使用します。鍵の管理が重要です。

    • :AES(Advanced Encryption Standard)、DES(Data Encryption Standard)

    • 使用例:ファイルの暗号化、データベースの暗号化

  2. 公開鍵暗号

    • 特徴:暗号化には公開鍵を使用し、復号化には対応する秘密鍵を使用します。公開鍵は自由に配布できますが、秘密鍵は安全に保管する必要があります。

    • :RSA(Rivest-Shamir-Adleman)、ECC(Elliptic Curve Cryptography)

    • 使用例:SSL/TLSによる安全な通信、デジタル署名

AES_ENCRYPT関数を使用した暗号化

AES_ENCRYPT関数を使用した例で説明します。
使用するテーブルは、ハッシュ化の例で使用した「A」を使用します。

AES_ENCRYPT関数を使用して暗号化

秘密鍵は、「my_secret_key」としました。

CREATE TABLE A_Encrypted AS (
SELECT
ID,
AES_ENCRYPT(ID, 'my_secret_key') AS ENCRYPTED_ID
FROM A
) WITH DATA;

使用する関数
AES_ENCRYPT
:データをAESアルゴリズムを使用して暗号化
AES_DECRYPT:AESアルゴリズムを使用して暗号化されたデータを復号化

残念ながら私の使用環境では、暗号化関数の使用が許可されておらず実行できませんでした。
使用しているバージョンによってそもそも関数がサポートされていない場合やシステム設定によって許容されていないことがあるようです。

バージョン確認方法

バージョンは、以下のSQLクエリを実行して確認することができます。

SELECT * FROM DBC.DBCInfo WHERE InfoKey = 'VERSION';
バージョン確認

この記事が気に入ったらサポートをしてみませんか?