セキュリティ

花キューピット情報漏洩:423万件の対象確認とパスワード変更、使い回しの点検手順

AIの活用によるセキュリティの向上

花キューピット株式会社は2026年10月28日、同社の管理システムが不正アクセスを受け、インターネット花キューピットとビジネス花キューピットの会員情報が漏えいしたと公表しました。該当する可能性があるのは4,238,242件で、漏れた項目はユーザーID・パスワード・PC用と携帯用のメールアドレスです。前半では、自分が対象かの線引き、ユーザーIDの確かめ方とパスワード変更の手順、本物の窓口を公式発表から整理します。後半は、「復元・解読ができない形式」で保存されたパスワードが持ち出された後に何が起きるかを、ハッシュの計算時間の計測と漏えい済みパスワードの照合で再現します。

まとめ:花キューピット情報漏洩で漏れた4項目と、会員が今日やる2つのこと

花キューピットのお知らせによると、10月14日から15日にかけて第三者が管理システムに不正アクセスし、19日に漏えいを確認しました。氏名・住所・電話番号・生年月日・クレジットカード番号・お届け先は漏れていないとしています。パスワードは不可逆な形式で保存されていたため、直ちに不正利用される可能性は低いというのが同社の判断です。

それでも会員がやることは2つあります。1つは花キューピットのパスワードを変えること、もう1つは同じパスワードを使っている他のサービスのパスワードも変えることです。漏れたのはログインに使うIDとメールアドレスで、パスワードが当てられた場合に他社サイトで試される組がそろっています。

項目 公表内容(2026年10月30日時点)
対象サービス インターネット花キューピット
ビジネス花キューピット
件数 4,238,242件(該当する可能性)
漏えいした項目 ユーザーID・パスワード・PC・携帯メールアドレス
パスワードの形式 復元・解読ができない不可逆な形式
漏れていない情報 氏名・住所・電話番号・カード番号など
補償 金銭的な補填や返金の予定なし
未公表 侵入経路・対象システムの詳細

花キューピット会員が最初に確かめること:対象の線引き、IDの確認、窓口の番号

対象になる会員と、外部モール・電話注文・加盟店で買った人の扱い

対象は、花キューピットの公式ECサイトにメールアドレスを登録した会員です。外部のショッピングモールで注文した人、電話で注文してメールアドレスを登録していない人、街の花キューピット加盟店で買った人は該当しないと同社は説明しています。

退会した人も無関係とは限りません。漏えいが確認された場合は個別に案内するとしており、退会済みのアカウントはすでにログインできない状態です。10月28日から登録メールアドレスへ順次メールで連絡しています。アドレスを変えていてメールが届かない会員には、このお知らせをもって個別連絡に代えるとしています。10月30日時点で、IDを入れて対象かを調べるページはありません。

ユーザーIDの初期値はメールアドレス、再発行ページでの確認と変更の手順

ユーザーIDは、登録したメールアドレスが初期値です。同じアドレスですでに登録があった場合や自分で変えた場合は、6文字以上の英数字になっています。IDを覚えていなくても、インターネット花キューピットのユーザーID確認・パスワードの再発行ページから確かめられます。ビジネス花キューピットの会員は、お知らせに載っている法人向けの再発行ページを使ってください。

新しいパスワードは、他のサービスで使っていない文字列にします。長さを優先して、単語を3つ4つつないだ15文字以上の文字列にすると覚えやすく、当てられにくくなります。花キューピット以外のサービスで同じパスワードを使っていたなら、メール・銀行・通販の順に変えてください。メールを乗っ取られると、他のサービスのパスワード再設定まで奪われるからです。漏れたIDとパスワードの組が別サービスで試される仕組みはパスワードリスト攻撃の検知の指標と漏えい照合で解説しています。

正規の窓口0120-805-666と、パスワードを尋ねる連絡を疑う理由

問い合わせ先は、インターネット花キューピット個人情報相談窓口(0120-805-666、9時00分〜17時30分)です。花キューピットは、メールや電話でパスワード・カード番号・暗証番号・認証コードを尋ねることは一切ないと明記しています。

漏れたメールアドレスには、花キューピットや金融機関を装ったメールが届くおそれがあります。花を贈った履歴がある人は「お届けできませんでした」「ご注文の確認」といった件名を信じやすいので、本文のリンクから入らず、ブックマークや検索から公式サイトに入ってください。偽のメールが成り立つ仕組みはフィッシング詐欺の成立の仕組みと技術的対策で取り上げました。

公式発表で追う経過:10月14日の不正アクセスから28日の公表まで14日間

お知らせの日付を並べると、次のとおりです。

  1. 10月14日〜15日:管理システムに第三者が不正アクセス
  2. 10月19日:会員情報の漏えいを確認
  3. 10月28日:公表し、対象者へのメール連絡を開始

同社は攻撃経路を遮断し、ネットワークのアクセス制御と監視を強めたとしています。現時点で新たな不正な挙動や、二次利用・不正利用の被害は確認されていません。外部の専門機関と原因の究明と恒久対策を進めているものの、どのシステムのどこから入られたかは公表されていません。

個人情報保護委員会と警察への報告、確報の期限から見た続報の時期

花キューピットは個人情報保護委員会と警察に報告したとしています。個人情報保護委員会の漏えい等の対応ページは、速報を発覚から3〜5日以内、確報を30日以内とし、不正の目的によるおそれがある漏えいの確報は60日以内としています。発覚を10月19日と置くと、確報の期限は12月18日ごろです。侵入経路やハッシュの方式は、そのころまでに続報として出る可能性があります。速報と確報に何を書くかは個人情報保護委員会への報告義務の実務で整理しました。

同じ10月には、ソースネクストの不正アクセスやふるさとチョイスの不正アクセスでも会員情報の漏えいが公表されています。複数のサービスで同じパスワードを使っている人ほど、今回の変更を急ぐ理由があります。

開発側の検証:「不可逆な形式」で保存されたパスワードが持ち出された後の総当たり

IDの初期値がメールアドレスだと、漏れた組がそのままログイン候補になる構造

今回漏れた項目は、ログインに要る値のうちパスワード以外のすべてです。ユーザーIDの初期値がメールアドレスなので、多くの会員はIDとメールアドレスが同じ文字列になっています。攻撃者は、ハッシュからパスワードを1件でも当てれば、そのメールアドレスとパスワードの組を他のECサイトや通販サイトで試せます。

「復元・解読ができない形式」はハッシュ化のことだと読めます。ハッシュは逆算できませんが、候補の文字列を同じ方式で計算して一致を探すことはできます。だから強さを決めるのは、1回の計算にかかる時間と、ソルトで会員ごとに計算をやり直させているかです。花キューピットがどの方式を使っているかは公表されていないので、以下は一般論として試します。ハッシュと暗号化の違いはハッシュ化と暗号化の違いとパスワード保管で扱っています。

SHA-256とscryptで変わる総当たりの速さ、Pythonで計測する手順

次のコードは標準ライブラリだけで動きます。古い方式の例としてソルトなしのSHA-256、推奨される方式としてscryptを取り上げ、候補を試す時間を測ります。scryptの設定値はOWASPのPassword Storage Cheat Sheetの最小設定(N=2^17・r=8・p=1)に合わせ、関数の仕様はPythonのhashlibに従いました。後半の照合と上げ替えも同じファイルに入れています。

# 漏れたハッシュの総当たり速度・漏えい済みパスワードの照合・古いハッシュの上げ替えを試す(Python 3.8以上・標準ライブラリのみ)
# 使い方: python hana_demo.py          (照合はオフラインの見本データで実行)
#         python hana_demo.py --online (照合だけ Pwned Passwords の range API に問い合わせる)
import hashlib, hmac, os, sys, time, urllib.request

def sha256_hex(pw):                      # 古い方式の例: ソルトなしSHA-256
    return hashlib.sha256(pw.encode()).hexdigest()

N, R, P = 2**17, 8, 1                    # OWASP の scrypt 最小設定
def scrypt_record(pw, salt=None):
    salt = salt or os.urandom(16)
    h = hashlib.scrypt(pw.encode(), salt=salt, n=N, r=R, p=P, maxmem=2**28, dklen=32)
    return f"scrypt${N}${R}${P}${salt.hex()}${h.hex()}"

# 1) 候補1,000語を試すのにかかる時間(攻撃者の手元の計算量)
words = [f"hana{i:04d}" for i in range(1000)]
t = time.perf_counter(); [sha256_hex(w) for w in words]
print(f"[speed ] sha256 x1000: {time.perf_counter() - t:.4f}s")
t = time.perf_counter(); [scrypt_record(w, b"0" * 16) for w in words[:10]]
print(f"[speed ] scrypt x10  : {time.perf_counter() - t:.2f}s")

# 2) 漏えい済みパスワードの照合(SHA-1の先頭5文字だけを送る k-匿名性方式)
def pwned_count(pw, fetch):
    h = hashlib.sha1(pw.encode()).hexdigest().upper()
    for line in fetch(h[:5]).splitlines():
        suffix, _, count = line.partition(":")
        if suffix == h[5:]:
            return int(count)
    return 0

def fetch_online(prefix):
    req = urllib.request.Request(f"https://api.pwnedpasswords.com/range/{prefix}",
                                 headers={"Add-Padding": "true", "User-Agent": "hana-demo"})
    return urllib.request.urlopen(req, timeout=10).read().decode()

def fetch_offline(prefix):               # 見本: 'password' のハッシュだけ載った応答を模す
    full = hashlib.sha1(b"password").hexdigest().upper()
    return f"{full[5:]}:9999\r\n0000000000000000000000000000000000A:0" if prefix == full[:5] else ""

fetch = fetch_online if "--online" in sys.argv else fetch_offline
for pw in ["password", "Kasumisou-Hanataba-2026"]:
    n = pwned_count(pw, fetch)
    print(f"[pwned ] {pw!r}: {'reject' if n else 'ok'} (count={n})")

# 3) ログイン成功時に、古いSHA-256のハッシュをscryptへ上げ替える
db = {"member1": sha256_hex("Kasumisou-Hanataba-2026")}
def login(uid, pw):
    rec = db[uid]
    if rec.startswith("scrypt$"):
        _, n, r, p, salt, _h = rec.split("$")
        return hmac.compare_digest(scrypt_record(pw, bytes.fromhex(salt)), rec)
    if hmac.compare_digest(sha256_hex(pw), rec):
        db[uid] = scrypt_record(pw)          # 平文が手元にあるこの瞬間だけ上げ替えられる
        return True
    return False

print("[login ] first :", login("member1", "Kasumisou-Hanataba-2026"), db["member1"][:22] + "...")
print("[login ] second:", login("member1", "Kasumisou-Hanataba-2026"))
print("[login ] wrong :", login("member1", "password"))

Python 3.14系(Windows)でオフラインのまま実行した結果です。秒数は実行環境で変わり、5行目のハッシュの値はソルトが乱数なので実行のたびに変わります。

$ python hana_demo.py
[speed ] sha256 x1000: 0.0019s
[speed ] scrypt x10  : 5.70s
[pwned ] 'password': reject (count=9999)
[pwned ] 'Kasumisou-Hanataba-2026': ok (count=0)
[login ] first : True scrypt$131072$8$1$86c4...
[login ] second: True
[login ] wrong : False

1行目と2行目を1件あたりに直すと、SHA-256はおよそ2マイクロ秒、scryptはおよそ0.57秒です。同じ時間で試せる候補の数が約30万倍違います。攻撃者はGPUを使うので、SHA-256側の差はさらに大きくなる計算です。scryptやArgon2idでもソルト付きなら、423万件を一度に崩すことはできず、会員1人ずつに計算をやり直すことになります。一方で「password」のような上位の候補は、遅い方式でも数回の計算で当たります。ハッシュの方式が強くても、弱いパスワードを使っている会員は変更が要るということです。

漏えい済みパスワードをk-匿名性で照合し、登録と変更の時点で弾く実装

3行目と4行目は、パスワードがすでに漏えいデータに含まれているかの照合です。NIST SP 800-63B-4は、新しいパスワードを過去の漏えいデータや辞書語、サービス名を含む一覧と照合するよう事業者に求めています。単独で使うパスワードは15文字以上、定期的な変更の強制は禁止とし、漏えいの証拠があるときは変更を強制するとしています。

照合先にはHave I Been PwnedのPwned Passwords APIが使えます。APIキーは不要で、パスワードのSHA-1の先頭5文字だけを送り、返ってきた末尾35文字の一覧から自分で一致を探します。パスワードそのものは外に出ません。Add-Padding: true を付けると応答が800〜1,000件に水増しされ、通信量から問い合わせ内容を推測されにくくなります。--online を付けて実行すると「password」には5,237万件余りの出現回数が返りました(2026年10月30日時点・件数は随時増えます)。会員登録とパスワード変更の画面でこの照合を通し、1件でも出たら別の文字列を求めてください。基準の決め方はNIST SP 800-63B-4に沿ったパスワード管理のポリシーにまとめています。

古いハッシュをログイン時にscryptへ上げ替える処理と、全件リセットを選ぶ条件

5行目から7行目は、古いSHA-256で保存されていた会員がログインした瞬間に、scryptのハッシュへ書き換える処理です。平文のパスワードが手元にあるのはログインの瞬間だけなので、ここで上げ替えます。ログイン時に新しい方式で計算し直すのは、OWASPも挙げている方法です。古いハッシュをそのまま新しい方式に通す重ね掛けは元のパスワードを知らずにできますが、崩しやすくなる場合があるとOWASPは注意しており、次のログインで直接のハッシュに置き換えるよう勧めています。

ただし、漏えいが起きた後はこの上げ替えでは間に合いません。持ち出されたハッシュは古い方式のまま攻撃者の手元にあるからです。保存方式がソルトなしの高速なハッシュだったと分かった場合は、全会員のパスワードを無効にして再設定を求めるべきです。花キューピットは変更を「お勧め」する段階に留めており、強制リセットはしていません。方式が強ければこの判断は成り立ちます。続報で方式が明かされたら、その妥当性を確かめられます。

事業者の判断:メールアドレスをIDにする会員サイトで、保存方式と診断を見直す条件

会員のIDとハッシュを持つECサイトは、保存方式と照合の有無を年1回点検

今回の公表から読める教訓は、パスワードをハッシュで持っていても、IDとメールアドレスと一緒に持ち出されれば会員に変更を求めるしかなくなる点です。漏えいの後で会員の負担を減らせるかは、事前の保存方式で決まります。

次の4つのどれかに当てはまるなら、外部の脆弱性診断と、パスワードの保存方式の点検を年1回入れるべきです。メールアドレスをそのままログインIDにしていること、保存方式を開発当時から見直していないこと、漏えい済みパスワードとの照合をしていないこと、管理システムに外部から入れる経路があることです。1つ目は多くのECサイトに当てはまるので、残りの3つを優先して確かめてください。ログインに二つ目の要素を足す方法は多要素認証の実装方式と耐フィッシングMFA、APIの入口で読み出しを絞る方法はAPI不正アクセス対策の実装手順で扱っています。

逆に、ログインを外部のIDサービスに任せていて自社でパスワードを持たない小さな会員サイトなら、保存方式の点検は不要です。その場合は管理画面の入口と権限の棚卸しを先に済ませれば足ります。会員サイト全体の点検項目は会員サイトのセキュリティ対策の設計チェック項目、診断の種類と費用の考え方は脆弱性診断の種類・費用相場と外注の判断基準で解説しています。

自社の会員サイトや管理システムに同じ弱点が残っていないかを第三者に確かめてもらいたいなら、脆弱性診断・セキュリティ診断で相談できます。

よくある質問

花キューピットの情報漏洩について、会員から出やすい質問をまとめました。

花キューピットの情報漏洩で自分が対象か確かめる方法はありますか?

10月30日時点で、IDを入れて対象かを調べるページはありません。公式ECサイトにメールアドレスを登録した会員は対象に含まれる可能性があり、10月28日から登録アドレスへ順次メールが届いています。外部モールで注文した人、メールを登録せず電話で注文した人、加盟店で買った人は対象外です。

花キューピットのパスワードはどうやって変更しますか?

インターネット花キューピットの会員は、ユーザーID確認・パスワードの再発行ページから手続きできます。ビジネス花キューピットの会員は、お知らせに載っている法人向けの再発行ページを使ってください。ユーザーIDを忘れた場合も同じページで確かめられます。新しいパスワードは他のサービスで使っていない文字列にしてください。

パスワードは暗号化されていたのに変える必要がありますか?

花キューピットは不可逆な形式で保存していたため直ちに悪用される可能性は低いとしつつ、変更を勧めています。不可逆な形式でも、よく使われるパスワードは候補を順に計算すれば当てられます。同じパスワードを他のサービスで使っている場合は、そちらも含めて変えてください。

クレジットカードの停止や再発行は必要ですか?

花キューピットはクレジットカード情報を保持しておらず、今回の漏えいの対象外としています。カードの停止や再発行は不要です。ただし、カード会社を装ったメールで番号を入力させる手口には引き続き注意してください。

花キューピットの情報漏洩で補償はありますか?

花キューピットは、金銭的な補填や返金は予定していないとしています。今後、新たに公表すべき事実が判明した場合は公式サイトで知らせるとしているので、続報を確かめてください。

関連記事

お気に入りに入れた記事の一覧

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.27 テックブログ Brotli 脆弱性:CVE-2026-111497の影響確認とNode.js・Python・.NETの更新手順
  2. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処
  3. 2026.10.29 テックブログ So-net情報漏洩:258万件の対象確認とメールのパスワード再設定、窓口の番号
  4. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  5. 2026.10.23 テックブログ Renta!はいつ再開?不正アクセスでメールアドレス等が流出したおそれ・再開時のパスワード再設定と運営側の対応

RELATED POSTS 関連記事

目次