メインコンテンツまでスキップ

API セキュリティ

私たちのAPIはHTTPSプロトコルに基づいており、POSTメソッドでJSONデータを送信します。データの改ざんを防ぎ、セキュリティを確保するために、APIはクライアント認証を要求し、Basic AuthおよびRSA署名認証の2つの認証方式をサポートしています。また、機密データの保護にはAESおよびRSAの2つの暗号化方式を提供しています。本稿ではこれらの認証機構と暗号化方法を紹介します。

認証

1. RSA署名認証(推奨)

RSA署名認証は、リクエストデータに署名を施すことで、受信者が送信者の公開鍵を使用してリクエストの真正性を検証できる仕組みです。これにより、データの改ざん防止と送信者の身元確認が可能です。

動作原理

クライアントは自分のRSA秘密鍵を使用してリクエストメッセージに署名します。サーバーは交換されたクライアントの公開鍵で署名を検証します。

利点

  • Basic Authに比べてセキュリティが高く、非対称暗号化とデジタル署名を使用。
  • 送信者の身元とメッセージの完全性を効果的に保証。
  • リプレイ攻撃や中間者攻撃を防止。

欠点

  • 公私鍵の管理を伴うため、実装が複雑。

2. Basic Auth

Basic Authenticationは、ユーザー名とパスワード(またはトークン)をBase64でエンコードし、リクエストヘッダーに送信する簡単な認証方式です。しかし暗号化は行われないため、HTTPSとIPホワイトリストの組み合わせが必要です。

ヒント

現バージョンではBasic Authはサポートされておらず、次回のリリースで追加予定です。

動作原理

リクエスト側はユーザー名:パスワード形式をBase64でエンコードし、Authorizationヘッダーに含めます。サーバーはデコードしてユーザー名とパスワードを検証します。

利点

  • 実装が簡単。
  • 多くのHTTPクライアントとサーバーサイドライブラリが標準でサポート。

欠点

  • Base64は単なるエンコードであり、暗号化にはならない。
  • ユーザー名とパスワードが毎回送信されるため、漏洩リスクが高い。

データの完全性と安全な通信を保証するため、Basic AuthではなくRSA署名認証の使用を推奨します。

データ暗号化

データ漏洩や改ざんを防ぐために、機密データの保護にはRSAまたはAES暗号化が使用されます。

1. RSA暗号化(推奨)

RSAは非対称暗号化アルゴリズムであり、公開鍵で暗号化し、秘密鍵で復号します。少量の機密データの暗号化に適しています。

動作原理

送信者は受信者の公開鍵でデータを暗号化し、受信者は自分の秘密鍵で復号します。

利点

  • 高いセキュリティ。
  • 公開鍵は自由に配布可能で、秘密鍵は安全に保持。

欠点

  • 公私鍵の管理が必要で、実装が複雑。

2. AES暗号化

AESは対称暗号化アルゴリズムであり、同じ鍵で暗号化と復号を行います。大量データの暗号化に適しています。

ヒント

現バージョンではAES暗号化はサポートされておらず、次回のリリースで追加予定です。

動作原理

送信者と受信者は同じ鍵を共有し、データの暗号化と復号に使用します。

利点

  • 高速かつ効率的。
  • ファイルや長いテキストの暗号化に適している。

欠点

  • 鍵交換が必要で、鍵の管理が課題。

少量の機密データにはRSA暗号化を推奨します。