S/KEY je autentizační systém běžný na systémech unixového typu založený na jednorázových heslech. Byl vyvinut pro přihlašování na server z jednoduchých řádkových terminálů a obecněji nedůvěryhodných počítačů, do kterých nechce uživatel vkládat své důvěrné dlouhodobé heslo. Protože jsou používána jednorázová hesla, je odposlechnutí hesla (například analyzátorem paketů) samo o sobě vůči tomuto zabezpečení neúčinné.
S/KEY je podporován v Linuxu (v rámci systému PAM), v OpenBSD, NetBSD a FreeBSD. Je také implementován v OpenSSH od verze 1.2.2 vydané v prosinci 1999. Je na něm založeno také autentizační schéma OPIE.
Systému se také někdy přezdívá Lamportovo schéma podle jeho autora, Leslieho Lamporta. První implementaci vytvořili Neil Haller, Phil Karn a John Walden ve společnosti Bellcore koncem osmdesátých let dvacátého století. Jeho popularita začala upadat, když jednak vypršely patenty chránící algoritmy asymetrické kryptografie a jednak došlo k rozšíření laptopů a protokolů typu SSH, které chrání kromě hesla i celou komunikaci, a původně běžné přihlašování z nedůvěryhodných počítačů se stalo menšinovou záležitostí.
Vytváření hesel
Cílový server, který bude ověřovat autentizaci, postupuje následovně:
Nejprve je získáno úvodní náhodné tajemství W. To může vytvořit vestavěný generátor náhody, nebo jej může dodat uživatel.
Na konci vytváření hesel je zničeno tajemství W, neboť není dále potřeba a jeho kompromitace by kompromitovala celý systém.
Uživateli jsou hesla dána v opačném pořadí, tedy Hn(W), Hn−1(W), ..., H(H(W)), H(W).
Na serveru jsou smazána všechna hesla kromě prvního Hn
Použití hesel
Uživatel má tedy k dispozici n hesel. První heslo se nepoužije, začíná se až druhým heslem.
Uživatel pošle heslo pwd, které je na řadě.
Server spočítá H(pwd) a srovná ho s hodnotou, kterou má uloženou. Pokud heslo odpovídá, tak autentizace uspěla a server si uchová pwd pro příští srovnání.