07. Secure
secureオブジェクトは、セキュリティ関連の演算とデータの暗号化復号化機能を提供する組み込みオブジェクトです。
機能概要:
- HMAC演算をサポートします。
- SHA-256ハッシュ演算をサポートします。
- Base64エンコード/デコードをサポートします。
- データ暗号化/復号化をサポートします。
- 署名演算/検証をサポートします。
secure Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
secure.setHmac() | HMAC演算をセットアップします。 | ||
secure.hmacUpdate() | HMAC演算対象のデータストリームを追加します。 | ||
secure.hmacDigest() | HMAC値を出力します。 | ||
secure.freeHmac() | HMAC演算リソースを解放します。 | ||
secure.startSha256() | SHA-256ハッシュ演算を開始します。 | ||
secure.updateSha256() | SHA-256ハッシュ演算対象のデータストリームを追加します。 | ||
secure.finishSha256() | SHA-256ハッシュ値を出力します。 | ||
secure.base64Encode() | 与えられたデータに対してBase64エンコードを行います。 | ||
secure.base64Decode() | 与えられたデータに対してBase64デコードを行います。 | ||
secure.genKey() | 非対称暗号化方式のキーペアを作成します。 | ||
secure.encPK() | 指定された公開鍵を使用して、データを暗号化します。 | ||
secure.decPK() | 指定された秘密鍵を使用して、データを復号化します。 | ||
secure.setSign() | 署名演算/検証をセットアップします。 | ||
secure.signUpdate() | 署名演算/検証対象のデータストリームを追加します。 | ||
secure.signDigest() | 署名値を出力します。 | ||
secure.verifyDigest() | 署名検証結果を出力します。 | ||
secure.freeSign() | 署名演算/検証リソースを解放します。 |
Details
secure.setHmac(algo,key)
HMAC演算をセットアップします。
HMAC演算リソースが確保され、HMAC演算に関連するメソッドが使用可能となります。
尚、同時に複数の演算リソースを持つことはできません。
再セットアップする場合は、secure.hmacDigest()又はsecure.freeHmac()を実行して、一度、演算リソースを解放してください。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
algo | string | mandatory | アルゴリズム名 使用するアルゴリズム名を指定します。 次のハッシュアルゴリズムがサポートされています。 'sha256' | |
key | string, ArrayBuffer | mandatory | 秘密鍵 文字列指定とバイナリ指定が可能です。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.hmacUpdate(message)
HMAC演算対象のデータストリームを追加します。
このメソッドは継続的に呼び出すことができます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
message | string | mandatory | 演算対象となるデータストリーム 文字列のみ指定可能です。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.hmacDigest()
HMAC値をバイナリで出力します。
同時に、HMAC演算リソースが解放されます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | ArrayBuffer | - | HMAC値 | 異常が発生した時は、例外となります。 |
secure.freeHmac()
HMAC演算リソースを解放します。
このメソッドはsecure.hmacDigest()を呼び出す前にHMAC演算を中止する場合に使用します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - | - |
secure.startSha256(data)
SHA-256ハッシュ演算を開始します。
ハッシュ演算リソースが確保され、ハッシュ演算に関連するメソッドが使用可能となります。
尚、同時に複数の演算リソースを持つことはできません。
再スタートする場合は、secure.finishSha256()を実行して、一度、演算リソースを解放してください。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string, ArrayBuffer | optional | 演算対象となるデータストリーム 文字列指定とバイナリ指定が可能です。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.updateSha256(data)
SHA-256ハッシュ演算対象のデータストリームを追加します。
このメソッドは継続的に呼び出すことができます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string, ArrayBuffer | mandatory | 演算対象となるデータストリーム 文字列指定とバイナリ指定が可能です。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.finishSha256(data)
SHA-256ハッシュ値をバイナリで出力します。
同時に、ハッシュ演算リソースが解放されます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string, ArrayBuffer | optional | 演算対象となるデータストリーム 文字列指定とバイナリ指定が可能です。 | |
return | ArrayBuffer | - | SHA-256ハッシュ値 | 異常が発生した時は、例外となります。 |
secure.base64Encode(data)
与えられたデータに対してBase64エンコードを行います。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string, ArrayBuffer | mandatory | エンコードするデータ 文字列指定とバイナリ指定が可能です。 | |
return | string | - | エンコードデータ | 異常が発生した時は、例外となります。 動的メモリ不足の場合は、データ量を減らす必要があります。 |
secure.base64Decode(data)
与えられたデータに対してBase64デコードを行います。出力はバイナリです。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string | mandatory | エンコードされたデータ 文字列のみ指定可能です。 | |
return | ArrayBuffer | - | デコードデータ | 異常が発生した時は、例外となります。 動的メモリ不足の場合は、データ量を減らす必要があります。 |
secure.genKey(type[,length])
非対称暗号化方式のキーペアを作成します。
作成された秘密鍵は一時的な内部RAMに保存され、このメソッドが実行される度に更新されます。
この秘密鍵はスクリプト動作中は保持されますが、スクリプトの再読み込みやシステムリセット、スタンバイモード移行の際に破棄されます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
type | string | mandatory | 暗号方式名 使用する暗号化方式名を指定します。 次の暗号化方式がサポートされています。 'rsa' | |
length | number | optional | 鍵長 設定範囲: 1024~2048 デフォルト値は1024となります。 | |
return | string | - | 公開鍵 (PEM形式) | 異常が発生した時は、例外となります。 |
secure.encPK(pubKey,data)
指定された公開鍵を使用して、データを暗号化します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
pubKey | string | mandatory | 指定された公開鍵 (PEM形式) | RSA (PKCS#1 v2.1 RSAES-OAEP SHA-256)のみに対応します。 |
data | string | mandatory | プレーンデータ 文字列のみ指定可能です。 設定範囲: 鍵長/8-64-2 (※1) | ※1: 鍵長=1024の場合、 1024 / 8 - 64 - 2 = 62 |
return | ArrayBuffer | - | 暗号化データ | 異常が発生した時は、例外となります。 |
secure.decPK(encData)
secure.genKey()で作成した秘密鍵を使用して、データを復号化します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
encData | ArrayBuffer | mandatory | 暗号化データ | RSA (PKCS#1 v2.1 RSAES-OAEP SHA-256)のみに対応します。 |
return | string | - | 復号化データ | 異常が発生した時は、例外となります。 |
secure.setSign(algo)
署名演算/検証をセットアップします。
署名演算/検証リソースが確保され、署名演算/検証に関連するメソッドが使用可能となります。
尚、同時に複数の演算リソースを持つことはできません。
再セットアップする場合は、secure.signDigest()、secure.verifyDigest()、又はsecure.freeSign()を実行して、一度、演算リソースを解放してください。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
algo | string | mandatory | アルゴリズム名 使用するアルゴリズム名を指定します。 次のハッシュアルゴリズムがサポートされています。 'sha256' | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.signUpdate(message)
署名演算/検証対象のデータストリームを追加します。
このメソッドは継続的に呼び出すことができます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
message | string | mandatory | 演算/検証対象となるデータストリーム 文字列のみ指定可能です。 | |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
secure.signDigest([priKey])
署名値をバイナリで出力します。
同時に、署名演算リソースが解放されます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
priKey | string | optional | 指定された秘密鍵 (PEM形式) 省略時は、secure.genKey()で生成された秘密鍵が使用されます。 | RSA (鍵長2048以内)のみに対応します。 |
return | ArrayBuffer | - | 署名値 | 異常が発生した時は、例外となります。 |
secure.verifyDigest(pubKey,signature)
署名検証結果を出力します。
同時に、署名検証リソースが解放されます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
pubKey | string | mandatory | 指定された公開鍵 (PEM形式) | RSA (鍵長2048以内)のみに対応します。 |
signature | ArrayBuffer | mandatory | 署名値 バイナリでのみ指定可能です。 | |
return | boolean | - | 署名検証結果 成功した場合にはtrueとなります。 | 異常が発生した時は、例外となります。 |
secure.freeSign()
署名演算/検証リソースを解放します。
このメソッドはsecure.signDigest()又はsecure.verifyDigest()を呼び出す前にHMAC演算を中止する場合に使用します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - | - |
オブジェクトの使用例
Sample 1
HMAC演算のサンプルです。
var secretKey = '12345';
secure.setHmac('sha256', secretKey);
var payload = 'Hello World!';
secure.hmacUpdate(payload);
var digest_bin = secure.hmacDigest();
Sample 2
Sha-256ハッシュ演算のサンプルです。
var inputData = ['abcde', 'fghijk', 'lmnopqr', 'stuvwxyz' ];
secure.startSha256();
for (var i = 0; i < inputData.length; i++){
secure.updateSha256(inputData[i]);
}
var hashBin = secure.finishSha256();
Sample 3
Base64エンコードとデコードのサンプルです。
var orgStr = 'abcde';
var b64Str;
ab2string = function(ab) {
var str = String.fromCharCode.apply(null, new Uint8Array(ab));
return str;
}
b64Str = secure.base64Encode(orgStr);
print('base64 encode:' + b64Str);
var dec_bin;
decBin = secure.base64Decode(b64Str);
print(ab2string(decBin));
Sample 4
Base64URLエンコードのサンプルです。
var b64Str = secure.base64Encode(targetData).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
Sample 5
RSAキーペア作成、暗号化、及び復号化のサンプルです。
var key_size = 1024;
var public_key;
public_key = secure.genKey('rsa', key_size);
print('public_key:' + public_key);
var plan_data = '......';//<=1024/8 - 64 -2
var enc_data = secure.encPK(public_key, plan_data);
var dec_data = secure.decPK(enc_data);
print('dec_data:' + dec_data);
Sample 6
RSAキーペア作成、署名、及び署名検証のサンプルです。
var message = 'Hello World!!!';
var key_size = 1024;
var public_key;
var signature;
//key-pair
public_key = secure.genKey('rsa', key_size);
//sign
secure.setSign('sha256');
secure.signUpdate(message);
signature = secure.signDigest();//->genKey()
//verify
var verify_result;
secure.setSign('sha256');
secure.signUpdate(message);
verify_result = secure.verifyDigest(public_key, signature);
print('result:' + verify_result);