質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

意見交換

クローズ

3回答

394閲覧

規則性に従ったランダム文字列の作成

Monlar

総合スコア1

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

0グッド

1クリップ

投稿2024/01/14 14:21

0

1

2者間でのランダム文字列の一致確認について、意見交換をさせていただきたいです。

例えば、A、Bの2者間でAPIによるデータ授受を行う際に、AがBに投げるAPI要求の中に、固定長のランダム文字列があるとします。このランダム文字列は要求の度に毎度異なるランダム文字列を生成します。

Bはこのランダム文字列をAからのリクエストとして受けますが、A⇒Bの間で改ざんされていないかを検知するため、Aが生成したランダム文字列とBがリクエストで受け取ったランダム文字列が等しいことを検証します。

例えばAが"abc123"という文字列を生成して、BにAPI要求を投げ、Bはその文字列を受け取りますが、それが"abc123"であれば、通常通りリクエストを処理します。ただし、通信間で何らかの改ざんがされ、"abc987"でBが受け取れば不一致としてシステムエラーを応答します。

この時の一致確認の実装方法について、Aの生成した文字列 = Bが受け取った文字列 を実装したいわけなのですが、BはAの生成した文字列について当然ながら知る方法がありません。

そこでAがランダム文字列を生成する際のロジックに目をつけ、AとBしか知り得ない規則性(例えば文字の組み合わせなど)に従ってランダム文字列を生成するようにすれば、上記の検証ができるのではないかと少し考えているのですが、有識者の皆さま、いかがでしょうか。

何かご意見ありましたらいただきたいと思っています。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答3

#1

meg_

総合スコア10582

投稿2024/01/14 15:39

編集2024/01/14 15:55

話の内容としてはAPIセキュリティってことですよね?
APIセキュリティとは?基礎知識や重要性、サイバー攻撃への対策方法を解説!
現在のタイトル「規則性に従ったランダム文字列の作成」だと内容が分かりにくいかと思います。

APIテクニカルガイドブックというものも内閣官房情報通信技術(IT)総合戦略室から発行されていますのでご参考まで。ここでは「TLS(SSL)サポート」と「API利用者認証」が推奨されています。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

otn

総合スコア84571

投稿2024/01/14 16:05

誰から来たのかを確認する方法を一般論で言うと、秘密鍵による署名を使うのでは?事前に公開鍵のやりとりが必要ですが。

一般的なAPIユーザー登録では、逆に、登録時にユーザがAPI提供元から秘密鍵をもらうという運用ではないかと思います。公開API提供元になったことはないですが、いくつかの公開APIを利用した経験からの推測です。
レスポンスの署名と検証も必要ならすれば良いし。

(秘密鍵:送信者が署名に使う鍵、公開鍵:受信者が署名検証に使う鍵)

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

ikedas

総合スコア4337

投稿2024/01/15 11:47

編集2024/01/15 11:59

通常ですとHMACなどのメッセージ認証符号を用いて改竄防止をします。これは「生成した文字列」が送り手と受け手の双方で一致することを検査します。他の方も述べておられるように、HMACなどのメッセージ認証符号では双方で秘密鍵を共有する必要があります。

一方、これも他の方が述べておられるように、公開鍵暗号技術を応用した電子署名も改竄防止をできますが、こちらは秘密鍵を共有しません。送り手は秘密鍵で「署名」を生成し、受け手は公開鍵で署名が正しいものであることを検証します。双方で共通に生成されるものはありません。

また、API認証としての使用はあまり一般的ではないかもしれませんが、ワンタイムパスワード (OTP) といわれるものは質問者さんがイメージするものに近いのではないでしょうか。最近は多要素認証の一要素として使われるのをよく目にします。かつては専用のハードウェアトークンを使うものが主流でしたが、最近はSMSでパスワードを送ってくるものや、時刻ベースのワンタイムパスワード (TOTP) アルゴリズムを使ってスマホなどの汎用端末でパスワード生成するのもよく使われています。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問