
軽量なPythonライブラリで、XOR暗号化とタイムスタンプベースの鍵を使用してJWTペイロード値を難読化し、ユーザーIDなどの機密クレームのプレーンテキストデコードを防止します。
JSON Web Token(JWT、「ジョット」と発音)は、2つの当事者間でJSONメッセージを渡すためのコンパクトでURLセーフな方法です。RFC 7519で定義された標準です。トークンは長い文字列で、ドットで区切られた部分に分割されています。各部分はbase64 URLエンコードされています。
トークンの構成部分はJWTのタイプによって異なります。すなわち、JWS(署名付きトークン)かJWE(暗号化トークン)かです。トークンが署名されている場合、ヘッダー、ペイロード、署名の3つのセクションがあります。トークンが暗号化されている場合、ヘッダー、暗号化キー、初期化ベクトル、暗号文(ペイロード)、認証タグの5つの部分で構成されます。おそらくJWTの最も一般的なユースケースは、OAuthおよびOpenID ConnectフローでアクセストークンやIDトークンとして利用することですが、他の目的にも使用できます。
このコードスニペットは、JWTトークンをデコードする際に、保存されたキーが平文で見えるペイロードセクションのセキュリティを強化することを目的とした調整の視点を提供します。通常、ペイロードセクションはJWTトークン(base64)からデコードすると平文で表示されます。主な目的は、ペイロードの値を軽く暗号化または難読化し、その意味を解読しにくくすることです。意図は、誰かがペイロード値をデコードしようとしても容易にできないようにすることです。
「userid」という名前のキーの値を難読化しようとする背後にある考えは以下の通りです:
そして..^^
in the example, the key is shown as { 'userid': 'random_value' },
making it apparent that it represents a user ID.
However, this is merely for illustrative purposes.
In practice, a predetermined and undisclosed name is typically used.
For example, 'a': 'changing_random_value'
この方法を使用して生成されたJWTトークンを改ざんしようとするには、JWT秘密鍵とUserIDの作成に使用されたXOR対称鍵の両方へのアクセスが必要です。
# python3 main.py
- Current Unix Timestamp: 1709160368
- Current Unix Timestamp to Human Readable: 2024-02-29 07:46:08
- userid: 23243232
- XOR Symmetric key: b'generally_user_salt_or_hash_or_random_uuid_this_value_must_be_in_dbms'
- JWT Secret key: yes_your_service_jwt_secret_key
- Encoded UserID and Timestamp: VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo=
- Decoded UserID and Hashed Timestamp: 23243232|e27436b7393eb6c2fb4d5e2a508a9c5c
- JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aW1lc3RhbXAiOiIyMDI0LTAyLTI5IDA3OjQ2OjA4IiwidXNlcmlkIjoiVlZaY1VVRlRYMTRGT2tkRVVVRnBFVlpmVFd3S0VHa0xVeFVLYXd0SE9rQUFXMVJYREdZV1FBbz0ifQ.bM_6cBZHdXhMZjyefr6YO5n5X51SzXjyBUEzFiBaZ7Q
- Decoded JWT: {'timestamp': '2024-02-29 07:46:08', 'userid': 'VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo='}
# run again
- Decoded JWT: {'timestamp': '2024-02-29 08:16:36', 'userid': 'VVZcUUFTX14FaRNAVBRpRQcORmtWRGleVUtRZlYXaBZZCgYOWGlDR10='}
- Decoded JWT: {'timestamp': '2024-02-29 08:16:51', 'userid': 'VVZcUUFTX14FZxMRVUdnEgJZEmxfRztRVUBabAsRZkdVVlJWWztGQVA='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:01', 'userid': 'VVZcUUFTX14FbxYQUkM8RVRZEmkLRWsNUBYNb1sQPREFDFYKDmYRQV4='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:09', 'userid': 'VVZcUUFTX14FbUNEVEVqEFlaTGoKQjxZBRULOlpGPUtSClALWD5GRAs='}
