パスワードを画像ホストへスクショしたあと、OCRの平文と画像IDがハッシュより危険な理由

画像共有サービスが侵害されたとき、告知には「パスワードはハッシュで保存していた」と書かれがちです。これを、かつて写したパスワードもまだ安全、と読む人は多いです。ハッシュが覆うのは、その1社のログイン用パスフレーズです。画面に残ったデータベースパスワード、APIキー、リカバリーコードは、別の経路を取ります。OCRテキストと、画像の直リンクです。2026年9月、HelpfeelのGyazo告知は、この層を分けて見せました。ユーザー情報は約2362万件、画像メタデータは約4.9億件、その中に画像IDとOCRテキストがあります。

先に結論を狭く置きます。画像ホストのログインパスワードがハッシュでも、スクショの中ですでに文字になったパスワードは止められません。画像IDから組み立てた直リンクも止められません。ホスト側のパスワードを変えても、切れるのはその1件のログインです。画面に写った生きた鍵は、元のシステムでローテーションしてください。この端末で照合できるのは、これから出す画素に読める秘密があるかどうかです。告知に「ハッシュ」と書いてあったかどうかではありません。

検索意図に一文で答える

パスワードを画像ホストへスクショする危険は、「ログインパスワードがハッシュか」ではありません。画面そのものと、そこから抜き出した文字が、独立した欄として端末を出るかどうかです。ハッシュが覆うのは、アカウント用パスフレーズの1列だけです。OCRテキスト、画像ID、アップロード元IP、User-Agent、EXIF位置情報は、別の組です。これらが漏れると、非公開のスクショは「リンクは推測できない」では守れません。絵の中のパスワードも、先にハッシュを割る必要がなくなります。

このノートは開発者、運用、そしてエラー画面、コンソール、パスワードマネージャーの窓を画像ホストへ上げてから同僚へ転送する人向けです。どの社の事故告知の代わりにもならず、「スクショをやめさせる手順」でもありません。持ち帰るべきなのは、公表されたハッシュが覆う層、画像IDが崩すプライバシーモデル、OCRが画素より検索しやすい理由、上げる前に出す内容を照合する方法です。

今回の告知が分けて見せた層

2026年9月16日、Gyazoの運営は Helpfeelの日本語告知 を出し、同日に 英語版 も出しています。経緯はこう書かれています。9月11日、第三者が画像アップロードサーバーの脆弱性を使い、任意のコマンドを実行した。同日夜に不正な挙動を検知し、12日未明までに侵入経路を遮断し、脆弱性を修正した。14日にデータが外へ出たことを確認し、一部の画像配信を止めた。15日に個人情報保護委員会へ報告し、対策完了後に新たに上げた画像の配信を再開した。

9月16日時点で確認された範囲は、二つに分かれます。第一は、ユーザーに関する情報 約2362万件です。ユーザーが書いた名前やニックネーム、メールアドレス、パスワードのハッシュ値、利用者ID、端末ID、ログインセッションID、連携していた場合のX連携用トークン、連携していた場合のGoogle SSOのメールアドレス、プロフィール、利用言語、登録日時、最終ログイン日時、契約プラン、課金ステータス。告知は、クレジットカード番号などの決済情報は含まないと書いています。この2362万件には、メールを登録していない匿名アカウントも含まれ、実際の人数は調査中です。

第二は、画像に関するメタデータです。主に2019年1月以前に登録された約4.9億件(画像関連データの約14.4%)に加え、別条件で取り出した約240万件。欄には、画像URLを構成する画像ID、アップロード元IPアドレス、User-Agent、画像に含まれる場合のEXIF位置情報、画像から抜き出したOCRテキスト、画像タイトル、取得元URL、非公開画像のパスフレーズのハッシュが含まれます。この告知での「画像」は、スクリーンショット、GIF、動画を含みます。HelpfeelとCosenseは別系統で、当日時点ではこの2系統からの流出は確認されていません。それらのページに埋め込んだGyazo画像は、配信停止の影響で開けないことがあります。

これは「またパスワードハッシュが盗まれた」話の繰り返しではありません。ハッシュ、セッションID、画像ID、OCRテキストは、並行する4本の経路です。ホスト側のログインパスワードだけを変えても、覆うのは最初の1本です。すでに出たセッションIDは止められません。告知は、認証関連情報の無効化と制限を実施したこと、Gyazoのパスワードと、他サービスで使い回した同一または類似のパスワードの変更を求めていることを書いています。

ログインパスワードのハッシュは、画面の平文を覆わない

パスワードハッシュの設計目標は、ユーザーテーブルが持っていかれたあと、攻撃者がログイン用パスフレーズをそのまま読めず、推測に計算を使わせることです。アルゴリズム、ソルト、反復回数が、この層の難しさを決めます。画面に写した別のパスフレーズが安全かは決めません。画像ホストのアカウントパスワードと、スクショに写った本番データベースのパスワードは、もともと同じ列ではありません。

開発者が端末、ブラウザのパスワード欄、クラウドのコンソール、パスワードマネージャーの窓を撮ると、画像ホストが受け取るのは画素です。多くの画像ホストは、そのあと文字認識を走らせ、検索できるOCR文字列として保存します。「あのエラーが写った図」を探すためです。認識結果がデータベースに入ると、パスワード、接続文字列、トークンは、画像バイトの中だけに生きなくなります。キーワードで絞り込める欄になります。今回の告知は「画像のOCRテキスト」を、漏れたメタデータの独立した項目として列挙しています。コメント欄の推測ではありません。テーブルの正式な列です。

ですから「パスワードはハッシュで保存していた」が支えられる結論は狭いです。この1社のログイン用パスフレーズは、ユーザーテーブルでは平文ではない。それだけです。次は支えられません。スクショ内のSSH秘密鍵も、先にハッシュを割る必要がある。OCRテーブルで BEGIN OPENSSH や AKIA は探せない。非公開画像は自分だけが開ける。後ろの文には、別の証拠が要ります。メタデータにOCRと画像IDがあるか。上げる前の画面に、読める秘密があったか。

本物のパスワード、APIキー、伏せていない接続文字列で試さないでください。今回だけ使うテスト文、またはその文だけが写ったスクショを用意してください。照合するのは、出ていく画素と要求に、そのカナリアがあるかどうかです。資格情報をもう一度画像ホストへ送ることではありません。

画像IDが「非公開リンク」を崩す理由

多くの画像ホストは、「公開で共有しない」をこう実装します。プロフィールへ並べず、乱数に見える直リンクだけを渡す。安全の仮定は、IDを知らなければURLを組み立てられない、です。これは隠れたアドレスであり、アクセス制御ではありません。IDを持った人は、同じ規則で同じアドレスを作れます。

Helpfeelの告知は、画像IDを「画像URLを構成する情報」と書き、第三者がこの情報で対象画像へアクセスし、不正に閲覧する恐れがあると書いています。そのために、一部画像の閲覧を一時的に無効化しています。告知はさらに、非公開画像のファイル一覧が取られていたこと、一部の非公開画像が第三者に閲覧された可能性を完全には否定できないことも確認しています。一覧とIDが揃うと、「このリンクは自分だけが知っている」という仮定は外れます。

非公開画像に別のパスフレーズを付けていても、告知が列挙しているのは「ハッシュ化されたパスフレーズ」です。ハッシュは、そのパスフレーズ自体に解読の一段を足します。すでにIDを持ち、画像ホストがいまだIDで画像を出している人から、画素を自動では奪いません。配信停止は、運営側の一時ゲートです。IDが一度もデータベースを出ていない証明ではありません。「グループへ貼っていない」を「図は保存領域にない」と書くのは、製品画面の可視性と、保存層の可視性を一文に畳んでいます。

EXIF位置情報、アップロード元IP、User-Agentは、第三の文脈です。画面や机をスマホで撮ると、GPSが付くことがあります。アップロード要求は、出口アドレスとクライアント識別を運びます。画素に番地がなくても、メタデータは「誰が、どこから、どのクライアントで1枚上げたか」を組み立て直せます。キャプチャツールが位置情報を落とすことも、落とさないこともあります。「アルバムではなくスクショを使った」は、EXIFが空である証明にはなりません。

OCRが画素より二次利用しやすい理由

PNG一枚を人手でめくる、あるいは視覚モデルを走らせて、散らかったデスクトップからパスワード欄を探すのは重いです。OCRテキストは、すでに切れた文字列です。漏えいのあと、password、BEGIN 、sk-、社内ホスト名を探す作業は、4.9億枚をめくるより桁違いに速いです。告知は認識精度を公表していません。必要もありません。データベースが「画像から抜き出した文字」を持っているなら、攻撃者が向き合うのはテキスト欄であり、サムネイルだけではありません。

「非公開にした」がOCR層を止めない理由も、ここにあります。可視性のスイッチが制御するのは、製品ページが図を並べるかです。OCRが制御するのは、画像ホストが画面を文字にしたかです。両方同時に真であり得ます。画面上は非公開、データベースにはタイトル、OCR、IDがある。ダンプが持っていくのはデータベースであり、共有ボタンの状態ではありません。

ワンタイムリンクで「相手があなたの画面を撮った」話とは、別の主張です。前のノートが扱うのは、受信側端末の写しです。ホストが暗号文を消しても、それは消えません。このノートが扱うのは、送信側が画素を画像ホストへ渡し、ホストが文字を抜き、IDを付けることです。片方は「相手が残した」。もう片方は「先に渡した」。「リンクが無効になった」「パスワードはハッシュだった」では、どちらも消えません。

目にする言い方 支えられる結論 支えられない結論
告知にパスワードはハッシュで保存とある ホスト側のログインは、ユーザーテーブルでは平文ではない スクショ内のパスワードも、先にハッシュを割る必要がある
画像は非公開で、一度も共有していない 製品ページは、公開一覧へ並べていない可能性が高い IDを知らない人は、直リンクを組み立てられない
ホスト側のログインパスワードを変えた その1件のログインは更新した スクショ内のデータベースパスワードとAPIキーも無効になった
ホストが一部画像の閲覧を止めた いま一部のIDでは、画素を取れない OCRテキストと過去のメタデータは、一度もデータベースを出ていない
撮ったのはエラー画面であり、パスワードマネージャーではない 画面にパスワード欄はないと思っている OCRはトークン、接続文字列、社内アドレスを抜き出せない
運営がセッションIDを無効化した その社の現セッションは、再利用できない可能性がある Xトークン、Google SSO連携、使い回したパスワードはすべて安全

上げる前に画面を見、出したあと要求を見る

標語は証拠になりません。次に照合するのは、あなたが制御できる二つだけです。これからこの端末を出る画素に、カナリアがあるか。ローカルのツールへ切り替えたとき、要求本文に原文が出てはいけないか。本物の本番パスワードを、どの画像ホストへも「確認のため」に送らないでください。

  1. 捨ててよいカナリアを用意します。例は canary-fp-20260920-gyazo-ocr。空のメモ、またはローカルの HTML に打ち、それを撮ります。本物のホスト名や鍵を混ぜないでください。
  2. スクショを拡大し、画素単位で見ます。カナリアは画面に全部入っているか。周囲にステータスバーの通知、別のパスワード欄、端末の古いコマンドはないか。人が読める字は、OCRもテキストとして収められます。
  3. それでも画像ホストを使うなら、開発者ツールの Network を開き、Preserve log を入れてから上げます。要求本文をカナリアで検索します。画像ホストが上げるのは画像バイトなので、カナリアはファイルへ入ります。「パスワードハッシュ」の列には入りません。これが要点です。ハッシュは、この1枚を覆いません。
  4. もう一本の経路を対照します。ワンタイムリンク を開き、同じカナリアをテキストとして書き、リンクを作ります。もう一度 Network を検索します。POST /secrets の本文にあるべきなのは、暗号文、有効期限、閲覧回数です。原文も、ハッシュ以降の鍵も出てはいけません。リンクの形は s.html?id={id}#{key}、鍵は # の後ろだけです。RFC 9110 は、リクエストの対象 URI にフラグメントを含めないと書いています。

最初の3項は、スクショ経路では秘密が画素として、そしてホストが抜き得る文字として、この端末を出ることを示します。第4項は、同じカナリアを「この端末の AES-256-GCM、上がるのは暗号文だけ」へ切り替えられることを示します。2本を混ぜないでください。先に画像ホストへ上げ、その直リンクをワンタイムリンクへ貼らない。ワンタイムリンクの完全な URL を撮って、その図を画像ホストへ戻さない。

完全なリンクと暗号文を、同じ経路で運ばないでください。画像ホストが運ぶのは画素です。ワンタイムリンクが運ぶのは暗号文と # 鍵です。鍵を同じ図へ写す、または s.html?id=…#… の全体を画像タイトルへ書くと、ハッシュ以降の保護は、その図またはそのメタデータを見られる人に対して、すでにありません。

「画像ホストは安全」を読み過ぎる三つの場面

第一に、「非公開」をアクセス制御と読むことです。画面に出ないのは、製品が公開一覧へ置いていない、という意味だけです。画像IDがデータベースにあり、直リンクの規則が公開なら、未共有の図でも組み立てられます。今回の告知の「非公開一覧が取られていた」は、この読み方への反例です。1社だけの実装の癖ではありません。

第二に、パスワード変更を、スクショ内の秘密のローテーションと読むことです。ホスト側のログイン、セッションID、第三者の OAuth トークン、画面の本番鍵は、別のシステムです。公式が求める Gyazo パスワードと、使い回した同一パスワードの変更は、前の数項だけを覆います。本番コンソールを撮ったなら、元のシステムで鍵を失効させ、データベースアカウントを更新し、リカバリーコードを無効にしてください。ローカルの パスワード強度チェック が照合できるのは、公開の高頻度な弱いパスワード一覧だけです。ある文字列が画像ホストの OCR テーブルへ入っていない証明にはなりません。

第三に、「撮ったのはエラーであり、パスワードではない」を、画面がきれいだと読むことです。端末の接続文字列、アドレスバーの token=、通知の確認コード、隣の窓の受信箱は、同じ1枚へ入ります。OCRは、あなたの意図では選別しません。上げる前に見られるのは、これから出すその1枚だけです。ファイル名を error.png にしても助けになりません。

よくある質問

画像ホストがパスワードをハッシュで保存しているなら、スクショ内のパスワードも安全ですか?

別の層です。ログインパスワードのハッシュが守るのは、そのサービスのアカウント用パスフレーズだけです。アルゴリズムとソルトの有無にも依存します。スクショを上げたあと、画像ホストはOCRテキスト、画像ID、アップロード元IP、EXIFを別に持てます。画面に写ったパスワード、鍵、接続文字列は、OCR欄ではすでに検索可能な平文であることが多いです。

非公開で、一度も共有していないスクショは、自分だけが開けますか?

「非公開」はたいてい、製品の画面が公開ページへ並べていない、という意味です。他人がアドレスを組み立てられない、という意味ではありません。画像IDは画像URLを構成する情報です。IDがメタデータと一緒に外へ出ると、非公開の直リンクは「推測できない」では守れません。運営が配信を止めても言えるのは、いま一部のIDでは画素を取れない、ということだけです。過去のメタデータが一度もコピーされていない、とは言えません。

画像ホストのログインパスワードを変えたら、スクショに写った秘密は回さなくてよいですか?

分けて扱ってください。ホスト側のパスワード変更が切るのは、その1件のログインだけです。すでに漏れたセッションIDは止められません。スクショに写ったデータベースパスワード、APIキー、SSH秘密鍵、リカバリーコードは、元のシステムでローテーションしてください。ホスト側のパスワード変更では代用できません。同一または類似のパスワードを使い回していたなら、公式の案内どおり、そちらも変えてください。

一度きりのパスワードをスクショして同僚へ送れますか?

生きたパスワードを画像ホストやチャットのアルバムへ入れないでください。短い文はこのタブで AES-256-GCM により暗号化し、ワンタイムリンク で送り、鍵は URL の # の後ろに置きます。形は s.html?id={id}#{key} です。作成も閲覧も開いてすぐ使え、アカウントは不要です。32 KB を超える材料は ファイル暗号化 へ。単ファイルは 5 GB まで、出力は .lock / .enc。ワンタイムリンクをドライブの代わりにしないでください。

同じカナリアを、開いてすぐ使える経路へ移す

計算の境界が書いてあるページで練習するなら、FastPwd の ワンタイムリンク を開けば足ります。登録は不要です。上のカナリアを書き、閲覧回数は 1 のままリンクを作り、上の第4項どおり Network を照合してください。本文にあるべきなのは暗号文であり、原文やハッシュ以降の鍵ではありません。短いパスワードを同僚へ渡さなければならないときだけ、この経路を使ってください。先に撮らないでください。

画面にチケット本文、電話番号、身分証番号が残っているなら、先に 個人情報マスク で規則マスクし、出すかどうかを決めてください。マスク処理はこの端末で完了します。原文は業務データとしてアップロードせず、アクセス解析にも書きません。乱数パスワードは先に パスワード生成 でこの端末で作れます。長さは 6〜128 文字、初期値は 16 文字。8 文字未満では安全性が低いと示します。生成はアップロードしません。スクショファイルごと外へ出す必要があるなら、先にファイル暗号化で暗号文にし、パスフレーズはワンタイムリンクだけで送ってください。画像ホストのタイトルへ書かないでください。

次に撮る前に、三つ覚えてください。第一に、ハッシュが覆うのはホスト側のログインであり、画面とOCRではありません。第二に、画像IDがある以上、非公開の直リンクはアクセス制御ではありません。第三に、繰り返せる観察は、上げる前の画素単位の確認と、暗号文経路へ切り替えたときのカナリアによる Network 検索です。引き継ぎ説明に書いてよいのは、この三文です。「ホストがパスワードはハッシュだと言ったので、スクショは大丈夫」は書けません。

関連記事

ワンタイムリンクが消すのはサーバー上の暗号文であり、相手が画面撮影していない証明にはなりません。ワンタイムリンクはサーバーが暗号文を消したことは証明できても、相手が画面撮影していないことは証明できない。クラウドへ上げる前のパスワード付きZIPは、ファイル名を隠せず、本機の AES-GCM でもありません。クラウドへ上げる前、パスワード付きZIPが止められる範囲と、それが本機のAES-256-GCMではない理由。「ローカル暗号化、アップロードなし」は、カナリアで Network を検索するまで証拠になりません。ブラウザのローカル暗号化で、平文が端末を出ていないことを確認する。