MENU

Soracom

Users

署名ヘッダと事前共有鍵を使って送信元を検証する

Beam が付与する署名ヘッダと事前共有鍵を使用して送信元を検証できます。たとえばサーバー側で署名ヘッダを検証することで SORACOM からのアクセスだけを許可できます。

Air for Cellular で HTTP/TCP/UDP to HTTPS または Web サイト エントリポイントをご利用の場合

署名は下記のような文字列を用いて計算され、x-soracom-signature としてリクエストに付与されます。

SHA256(${事前共有鍵}x-soracom-imei=${IMEI}x-soracom-imsi=${IMSI}x-soracom-msisdn=${MSISDN}x-soracom-sim-id=${SIM_ID}x-soracom-timestamp=${TIMESTAMP})

IMEI, IMSI, MSISDN, SIM ID はそれぞれグループコンフィグで有効にしたものだけが付与されます。 接続中のキャリアが対応していないなどの理由で IMEI が取得できなかった場合、該当部分 (x-soracom-imei=${IMEI}) は省略されます。

例えば下記のような前提条件の場合

IMSI: 440101111111111
IMEI: 1111122222333333
SIM ID: 555556666677777
MSISDN: 8901234567890
TIMESTAMP: 1445587157992
SIM IDヘッダ付与、IMEI ヘッダ付与、署名ヘッダ付与
事前共有鍵: topsecret を入力した認証キーを指定

具体的には以下のように計算されます。

SHA256('topsecret'+'x-soracom-imei=1111122222333333x-soracom-imsi=440101111111111x-soracom-timestamp=1445587157992')

IMEI を含めない場合は、以下のように計算されます。

SHA256('topsecret'+'x-soracom-imsi=440101111111111x-soracom-timestamp=1445587157992')

検証方法

Beam の HTTP エントリポイントを https://beamtest.soracom.io:443/ に設定したうえで署名ヘッダを付与してリクエストを行うと実際の動作の様子が下記のように確認できます。 https://beamtest.soracom.io/ では、事前共有鍵を topsecret に固定しています。

$ curl beam.soracom.io:8888
Hello SORACOM Beam Client 4401031******** !

== HTTP Headers ==
HTTP_X_SORACOM_IMEI = 3545660********
HTTP_X_SORACOM_IMSI = 4401031********
HTTP_X_SORACOM_SIGNATURE = ccc2594804064311344a46e880465b27992750a6a3fdf19463fefa584becf5b1
HTTP_X_SORACOM_SIGNATURE_VERSION = 20151001
HTTP_X_SORACOM_TIMESTAMP = 1482303563385

= Signature Verification =
Pre shared key = topsecret

stringToSign:
x-soracom-imei=3545660********x-soracom-imsi=4401031********x-soracom-timestamp=1482303563385

calculated_signature:
SHA256('topsecret'+stringToSign) = ccc2594804064311344a46e880465b27992750a6a3fdf19463fefa584becf5b1

provided_signature:
ccc2594804064311344a46e880465b27992750a6a3fdf19463fefa584becf5b1

signature:
Match!

Air for Cellular で TCP to TCPS Beam をご利用の場合

署名は下記のような文字列を用いて計算されます。

SIGNATURE = SHA256(${事前共有鍵}imei=${IMEI} imsi=${IMSI} msisdn=${MSISDN} simId=${SIM_ID} timestamp=${TIMESTAMP})

IMEI, IMSI, MSISDN, SIM ID はそれぞれグループコンフィグで有効にしたものだけが付与されます。 接続中のキャリアが対応していないなどの理由で IMEI が取得できなかった場合、該当部分は (imei=undefined) として処理されます。

例えば下記のような前提条件の場合

IMSI: 440101111111111
IMEI: 取得できず
SIM ID: 555556666677777
MSISDN: 8901234567890
TIMESTAMP: 1445587157992
SIM IDヘッダ付与、IMEI ヘッダ付与、署名ヘッダ付与
事前共有鍵: topsecret を入力した認証キーを指定

署名は以下のように計算されます。

SIGNATURE = SHA256('topsecret'+'imei=undefined simId=44010555556666677777 timestamp=1445587157992')

署名は他の情報とともに、TCP 接続確立時に転送先サーバーに以下のフォーマットで送信されます。

imei=${IMEI} imsi=${IMSI} msisdn=${MSISDN} simId=${SIM_ID} timestamp=${TIMESTAMP};signature=${SIGNATURE} version=20151001\r\n

検証方法

Beam の TCP to TCPS エントリポイントを以下のように設定したうえで接続を行うと、実際の動作の様子が下記のように確認できます。 https://beamtest.soracom.io/ では、事前共有鍵を topsecret に固定しています。

エントリーポイント: TCP to TCPS
プロトコル: TCPS
ホスト名: beamtest.soracom.io
ポート番号: 1234
ヘッダ: 任意のヘッダを付与
署名ヘッダ付与: ON
事前共有鍵: topsecret を入力した認証キーを指定
$ nc beam.soracom.io 8023
--- SIGNATURE VERIFICATION
imsi=44010*** timestamp=****;signature=**** version=20151001

string_to_sign: imsi=44010*** timestamp=****
calculated_signature: sha256(string_to_sign) = ****
provided_signature: ****
---
Hello Authorized Soracom Beam Client! :imsi=44010*** timestamp=****

Air for LoRaWAN で通信している場合

LoRaWAN で通信している場合も同様に署名は下記のように計算されます。署名は x-soracom-signature としてリクエストに付与されます。

SHA256(${事前共有鍵文字列}x-soracom-lora-device-id=${LoRa device id}x-soracom-timestamp=${timestamp})

例えば下記のような前提条件の場合

事前共有鍵: topsecret
LoRa device id: 000b78fffe000001
timestamp: 1492414740191

具体的には以下のように計算されます。

SHA256('topsecret'+'x-soracom-lora-device-id=000b78fffe000001x-soracom-timestamp=1492414740191')

Air for Sigfox で通信している場合

Sigfox で通信している場合も同様に署名は下記のように計算されます。署名は x-soracom-signature としてリクエストに付与されます。

SHA256(${事前共有鍵文字列}x-soracom-sigfox-device-id=${Sigfox device id}x-soracom-timestamp=${timestamp})

例えば下記のような前提条件の場合

事前共有鍵: topsecret
Sigfox device id: 000b78fffe000001
timestamp: 1492414740191

具体的には以下のように計算されます。

SHA256('topsecret'+'x-soracom-sigfox-device-id=000b78fffe000001x-soracom-timestamp=1492414740191')