【改名】ストックドッグ

金融系の会社で働くSEが株やPython、その他諸々について書いています。システムトレードもやってるよ!

HTTP Private APIの認証の仕組みを理解しよう

HTTP Private APIを使う前に、認証の仕組みについて抑えておこう

ここを理解すると、なぜAPI KeyとAPI Secretがバレてはまずいのか、が理解できます。

認証の仕組み

HTTP Private APIを使うには「認証」が必要です。

HTTP Public APIのようにリクエストを送ると、ススっとレスポンスが返ってくるわけではありません。


そもそもbitFlyer LightningのHPからアカウント情報の例えば資産残高を見ようとするとパスワードを入力しなければいけません。


それと同じように、リクエストを送る時もパスワードに変わる認証情報をつけなければ資産残高などの情報は取得できません。

※リクエストを送るときは、HPに入る時のパスワードは使いません


何を使うかというと...

この認証情報に使用されるのが、API KeyとAPI Secretです。

API Keyとは?

もうすでにAPI KeyとAPI Secretは発行済という前提で話を進めます。

API Keyはその人のアカウント情報を特定するためのKeyです。


リクエストを送っただけでは、どのアカウントの情報を持ってくればいいのかわからないので、API Keyを見て、あぁこの人はこのアカウントの人だな、なんてことを判断します。

API Secretとは?

API Secretが言わばパスワードのようなものです。

APIを使用するには、本人であるという確認が必要です。


何度も言うようですが、誰でも他人のAPIを使うことができたら、他人のアカウントで取引が可能となってしまうからです。


リクエストを送っている人が本人である、という確証を得るためにAPI Secretを使って本人であるという認証をします。

本人認証のシミュレーション

リクエストにAPI KeyとAPI Secretを付けてサーバーに送ります。

私 「API使わせて〜、資産残高確認したいよ〜、API KeyとAPI Secretはこれだよ〜」


bitFlyerサーバーは、API Keyを見てアカウントを判断します。

bitFlyerサーバー 「あぁ、この人か、ってことはこのアカウント情報を渡せばいいな、でも本当に本人か?」


bitFlyerサーバーは、ここでAPI Secretを見ます。

API Secretは本人とbitFlyerサーバーしか知らないので、ここが一致していれば本人である確証が得られます。


bitFlyerサーバー 「うん、API Secretは合っているね、本人のようだ、じゃあ資産残高の情報を返そう」


ざっとこんな流れで本人認証が行われます。

しかし、簡略化したためあたかもAPI Secretをそのまま送ったかのようになっていますが、実際はハッシュ化して送ります。

ハッシュ化することによって、盗聴を防ぐことができます。

ちょっと難しいけど、認証の詳しい仕組み

ハッシュ化とは

アルゴリズムによって、解読不可能な文字列に変換することです。
暗号は、可逆性なので、暗号化したものは復号することができます。
ハッシュ化は、非可逆性で、ハッシュ化したものは元には戻りません。
ハッシュ化の特徴として、同じ文字列を同じアルゴリズムでハッシュ化すると必ず同じ文字列が得られます。
そのため、実際にはAPI Secretを自分でハッシュ化したものを送り、サーバーはハッシュ化されたAPI Secretを受け取ります。
サーバーは、送り主のAPI Secretを保持しているので、そのAPI Secretを使って同様にハッシュ化します。

ハッシュ化した値が同じであれば、認証が成功、ということになります。
通信を行うときは、ハッシュ化しているので盗聴されても解読はできない、という仕組みになります。

なぜAPI SecretとAPI Keyはバレてはまずいの?

ここまで来ると、わかったのではないでしょうか?

そう、API SecretとAPI Keyが他人にバレると、勝手にAPIを使われてしまいます。

勝手な取引もされてしまう危険性があります。


もし、これらがバレてしまった時のために入手金に関するAPIは制限するのも手ですね。


以上です。

次回は、実際に認証が必要なコードを書いてみましょう。

システムトレードやろうよ 〜目次〜

www.stockdog.work