obscure

Stop leaking information by obscuring sequential ID numbers


Keywords
encrypt_id, REST, obfuscate
License
Apache-2.0
Install
pip install obscure==1.0.1

Documentation

build status version license coverage downloads

Obscure

Showing a steadly increasing sequence of integer IDs leaks information to customers, competitors, or malicious entities about the number and frequency of customers, inventory, or orders. Some example include:

/customer/123
/order/308

From these, I would conclude that I am only your 123rd customer with the 308th order. How a customer or competitor would feel about this would differ. However, the point is do I really want others to know this information? In addition, by creating another account or order, I can estimate the rate of change within your systems.

This class will help obscure your sequential order by providing a reverseable transformation to your numbers. By using different salts your transformations will be unique. In addition, the class gives some output helpers for hex, base32, and base64. There is one I call 'tame' as it removes the letters i and u to elimination some common offensive words.

Install

By far the simplest method is to use pip:

$ pip install obscure

Example

>>> from obscure import Obscure
>>> customer_id = 123
>>> num = Obscure(0x1234)
>>> num.transform(customer_id)
249699227
>>> num.transform(249699227)
123
>>> num.encode_hex(customer_id)
'0ee21b9b'
>>> num.encode_base32(customer_id)
'B3RBXGY'
>>> num.decode_base32(num.encode_base32(customer_id))
123
>>> num.encode_base64(customer_id)
'DuIbmw'
>>> num.encode_tame(customer_id)
'JB4XFK5'
>>> num.decode_tame(num.encode_tame(customer_id))
123