Záleží na tom, kolik chcete oddělit rolí.
Základní systém: váš „podpis“ je MAC. „Klíč API“ je tajná hodnota, se kterou je sdílen mezi serverem a uživatelem. Normální algoritmy MAC jako HMAC mohou jako klíč používat libovolné sekvence bitů, takže klíč lze snadno generovat pomocí / dev / urandom
(Linux, * BSD, MacOS X), volání CryptGenRandom ()
(Win32) nebo použití java.security.SecureRandom
(Java).
Vylepšený systém: váš signature je skutečný digitální podpis. To dává smysl, pokud chcete oddělit generátor klíčů (který může produkovat klíče, které budou akceptovány serverem) od samotného serveru (který ověřuje příchozí podpisy). Klíče pro podpisové algoritmy jsou matematické objekty se spoustou vnitřní struktury a každý algoritmus implikuje konkrétní algoritmus generování klíčů. Použijte knihovnu, která již implementuje potřebné bity (např. OpenSSL).
Ať tak či onak, je toho víc než jen klíč generace a podpisy. Pravděpodobně se například budete chtít vyhnout útokům na opakování : třetí strana, která má v úmyslu špehovat síť, a zaznamená platný požadavek podepsaný běžným uživatelem. Později útočník odešle požadavek znovu, spolu se svým podpisem, aby replikoval účinek. Abyste se vyhnuli útokům na opakování, musíte přidat nějaký druh externích protokolů a tyto věci je těžké udělat (není těžké definovat protokol; je velmi těžké definovat zabezpečený protokol). Chytré proto je opětovné použití existujícího dobře prověřeného protokolu, což v praxi znamená SSL / TLS.
U SSL je „základní systém“ omezeno na odeslání klíče API do záhlaví na začátku konverzace (to je přesně to, co se stane s ověřováním pomocí hesla na webových stránkách HTTPS). „Rozšířeným systémem“ je pak „SSL s certifikátem klienta“.