ソフトウェアライセンスキーとは何か?
ソフトウェアライセンスキーとは、あなたのソフトウェアの特定のインストールが実行を許可されていることを証明する文字列のことで、通常は購入・アカウント・特定のデバイスに紐づいている。「インストーラーさえあれば誰でも永久に使える」を「支払った人だけが使える」に変える仕組みだ。キー自体はたいてい意味を持たない——SLK-7X9K-2MPQ-R4WT-BH3Nのような一見ランダムな文字列で、その力はそれを検証するもの、つまりそのキーが有効か、(アクティベーション上限内で)未使用か、正しい製品に紐づいているかを確認できるサーバーから生まれる。誰も検証しないキーは、誰も見張っていないドアのパスワードにすぎない。
ライセンスキーは実際にどう機能するのか?
ライセンスキーが意味を持つ瞬間は2つある。アクティベーションと検証だ。アクティベーションは一度きり——顧客がキーを入力し、アプリがライセンスサーバーを呼び出し、サーバーはキーが有効でデバイス上限を超えていないことを確認したうえで、この特定のデバイス(通常はハードウェアフィンガープリント経由)が今アクティブ化されたことを記録する。検証はその後の起動のたびに行われる——アプリはアクティベーションがまだ有効かどうかを確認するが、これは再度サーバーを呼び出すか、あるいはより良い方法として、前回の検証成功時にローカルに保存された署名付きリースを確認することで行われ、これによりネット接続がなくても一定期間(通常3〜7日)オフラインで動作できる。この署名が重要だ——ファイルに保存された単純なローカルフラグは誰でもテキストエディタで書き換えられるが、暗号署名されたリース(現代の標準はEd25519)はネットワーク呼び出しなしに本物であることを検証できる一方、サーバーから外に出ることのない秘密鍵なしには偽造できない。
ライセンスキー vs プロダクトキー vs シリアルキー:実際の違いは?
日常的には頻繁に混同されるが、それぞれ由来が異なり、使う人によっては意味も異なる:
ライセンスキー
現代的で一般的な用語——通常はアカウントや購入に紐づき、稼働中のサーバーに対して検証され、しばしば失効可能。今日ほとんどのSaaSやインディーソフトウェアのライセンシングが実際に意味するのはこれだ。
プロダクトキー
歴史的にはパッケージ版/リテール版ソフトウェア(Windows、Office)で使われてきた——インストール時に一度入力するキーで、多くの場合一度だけ検証され、その後はほとんどチェックされない。
シリアル番号 / シリアルキー
3つの中で最も古い用語——元々は販売されたコピーごとの単なる一意な識別子で、サーバー側の検証がまったくないことも多く、それがシリアルがこれほど流出・共有されやすかった理由だ。
アクティベーションキー
実際には独立したカテゴリではない——通常は上記のいずれかの別名で、特に初回起動時にコピーをロック解除/有効化することを指して使われる。
ライセンスキーの種類
どのタイプが必要かは、あなたの販売方法と誰がソフトウェアを使うかに完全に左右される:
| Type | How it works | Best for |
|---|---|---|
| シングルマシン(ノードロック) | 1つのキーに対して1台のデバイス。2台目でアクティベーションを試みると失敗するか、1台目が無効化される。 | 個人向けに販売するデスクトップアプリ——インディーソフトウェアで最も一般的なモデル。 |
| フローティング / シート制 | チームで共有するN個の同時アクティベーション枠のプール。誰かが無効化またはオフラインになるとシートが空く。 | 1人単位ではなくチーム単位で販売するB2Bツール。 |
| サブスクリプション / 期間限定 | 課金期間が切れると、デバイスに関係なく、キー(またはその背後のアカウント)は検証に成功しなくなる。 | SaaSや継続収益型の製品——StripeなどのAPIと自然に組み合わさる。 |
| トライアルキー | 初回アクティベーションから固定の期間(7/14/30日)は検証に成功し、その後は停止する——これは有料キーとは別のロジックであり、単に誰も強制しないタイマー付きの有料キーではない。 | 有料製品をそのまま渡すことなく、購入前に試してもらうこと。 |
自前でライセンスシステムを構築すべきか、サービスを使うべきか?
自分で構築する
実現可能で、多くの開発者が実際にそうしている——しかし「キーを1つチェックするだけ」は、気づけばキーとアクティベーションを追跡するデータベース、アプリがどこからでも呼び出せるAPI、キーを失効させる手段(チャージバック、詐欺、返金は実際に起こる)、そして再インストールでリセットできないトライアルロジックへと膨らんでいく。これらはどれも安全にアプリ内だけに置くことはできない——本気の利用者なら、純粋にオフラインで行われるチェックはいずれパッチで外せてしまうからだ。すべてを並べてみると、それは本来の製品ではない機能のために、あなたが今後ずっと所有し続けることになる小さなバックエンドサービス——ホスティング、稼働率、メンテナンス——だとわかる。
ライセンシングサービスを使う
ホスト型のライセンシングAPI(SublimeKeysもその一例)は、activate/verify/deactivateのエンドポイント、販売のたびに手動または自動でキーを発行できるダッシュボード、署名付きリースによるオフライン検証、そして失効機能を、自前で何もホストすることなく提供してくれる。トレードオフはシンプルだ——ライセンシングのコードに二度と触れずに済む代わりに、わずかな継続コスト(多くは無料枠から始められる)を払う。ほとんどのインディー開発者にとって、この特定の車輪を再発明するより、本来の製品に時間を使うほうが価値がある。
インディー開発者がよくやるライセンシングの失敗
インストール時に一度だけキーをチェックする
継続的な検証がなければ、共有された1つのキーと流出した1つのインストーラーだけで、無制限の無料コピーが永遠に可能になる。
オフライン対応がない
オンラインでしか検証できないシステムは、Wi-Fiが切れた瞬間に有料ユーザーを締め出してしまい、セキュリティではなくサポートチケットを生む。
署名されていないローカルのライセンスファイル
ディスク上に{"licensed": true}と書かれたJSONファイルはライセンスチェックではない——それはただの提案であり、メモ帳で編集できてしまう。
失効の手段がない
特定のキーを無効化する方法がなければ、1件のチャージバックや1件のキー流出をきれいに取り消すことができない。
トライアルを状態ではなくタイマーとして扱う
「インストールからの日数」しかチェックしないトライアルは再インストールでリセットされてしまう。本物のトライアルロジックはサーバー側に置く必要がある。
よくある質問
無料アプリにもライセンスキーシステムは必要?
いいえ——ライセンスキーは有料アクセスを制限するために存在するもの。無料アプリにはチェックすべきものが何もない。
ライセンスキーはクラックされる?
ユーザー自身のデバイス上だけで完結するチェックは、十分に本気の人物によっていずれパッチで外される可能性がある。現実的なゴールはそれを不可能にすることではなく、気軽な共有に必要な手間を超えるコストを課しつつ、支払った顧客にはスムーズで邪魔されない体験を提供することだ。
アクティベーションと検証の違いは?
アクティベーションは、キーがデバイスで初めて使われるときに一度だけ発生する。検証はその後の起動のたびに発生し、アクティベーションがまだ有効かどうかを確認する。
ライセンスキーはインターネット接続なしでも機能する?
システムがオフライン検証をサポートしていれば可能——通常は、直近のオンライン検証成功時にローカルに保存された暗号署名付きリースによるもので、無期限ではなく一定の期間(日数単位)だけ有効。
ライセンスキーはDRMと同じもの?
関連はしているが同一ではない——DRMは通常、より深い技術的制限(暗号化、ハードウェアロック)を伴う。ライセンスキーシステムは、DRMが通常伴うその他の要素なしに、軽量(起動時のチェックのみ)にすることができる。
About
Patrick Chen——Sublimearts.ioの背後にいるインディー開発者。ReelNox Studioのためにまさにこのライセンスチェックのコードを書いた後、有料ソフトウェアを販売する他のすべてのインディー開発者が同じ問題をゼロから解決していることに気づき、SublimeKeysを構築した。