Slepý podpis ( anglicky blind signature ) je typ digitálního podpisu , jehož zvláštností je, že podepisující strana nemůže přesně znát obsah podepsaného dokumentu. Koncept slepého podpisu vynalezl David Chaum [1] v roce 1982 a také navrhl první implementaci pomocí algoritmu RSA . Bezpečnost schématu slepého podpisu byla založena na obtížnosti faktorizace velkých složených čísel . Od té doby bylo navrženo velké množství dalších schémat [2] [3] .
Základní myšlenka slepých podpisů je následující:
Na konci tohoto protokolu strana B neví nic o zprávě t, ani o podpisu pod touto zprávou.
Toto schéma lze přirovnat k obálce, ve které je umístěn dokument a list kopie. Pokud obálku podepíšete, podpis se otiskne na dokument a při otevření obálky bude dokument již podepsán.
Účelem slepého podpisu je zabránit podepisujícímu B, aby viděl zprávu A, kterou podepisuje, a odpovídající podpis pod touto zprávou. Proto nelze podepsanou zprávu dále přidružit k straně A.
Bezpečné schéma slepého podpisu musí splňovat 3 vlastnosti, a to:
Vzhledem k vlastnostem nulové znalosti a nesledovatelnosti může být schéma slepého podpisu široce používáno v aplikacích, kde je vyžadována důvěrnost, například v systémech elektronického hlasování [4] [5] [6] [7] .
Vzhledem k situaci: Bob je notář . Alice potřebuje, aby podepsal dokument, aniž by měl tušení o jeho obsahu. Bob pouze potvrzuje, že dokument je notářsky ověřen v určený čas. Potom jednají podle následujícího algoritmu:
V tomto schématu Alice chce, aby Bob slepě podepsal zprávu . Pro tohle:
Tento protokol funguje pouze tehdy, jsou-li funkce podepisování a šifrování komutativní .
První implementaci slepých podpisů provedl Chaum pomocí kryptosystému RSA:
Předpokládejme, že Bob má zpočátku veřejný klíč , kde je modul a veřejný exponent klíče.
Chaum přišel s celou rodinou složitějších algoritmů slepých podpisů, souhrnně nazývaných neočekávané slepé podpisy . Jejich schémata jsou ještě složitější, ale dávají více možností [1] .
Slepý podpis založený na Schnorr EDSNechť Alice chce podepsat zprávu od Boba tak, aby se Bob za prvé se zprávou při podepisování nemohl seznámit, a zadruhé, aby Bob následně po obdržení zprávy a odpovídajícího podpisu nemohl, identifikovat uživatele, který inicioval protokol slepého podpisu pro tuto konkrétní zprávu (Alice). Tento protokol je implementován následovně:
Pravost podpisu se prokazuje následovně. Vyplývá to z a . V tomto případě je problém anonymity vyřešen, protože jakoukoli trojici z množiny takových trojic, které vytvořil Bob, lze porovnat s podpisem na tomto dokumentu . Skutečně máme: a , tj. s ekvipravděpodobným náhodným výběrem termínů a podpis byl generován se stejnou pravděpodobností z jakékoli trojice obsažené v množině trojic tvořených signatářem. Podotýkáme také, že Bob ani nemá možnost prokázat, že v době, kdy vznikal podpis tohoto dokumentu , s ním nebyl obeznámen.
Slepý podpis založený na GOST R 34.10-94 Možnosti
p je prvočíslo , 510 ≤ | p | ≤ 512 (nebo 1022 ≤ | p | ≤ 1024), kde |p| je kapacita binární reprezentace čísla p.
q je velký prvočíselník p-1, 255 ≤ | q | ≤ 256 (nebo 511 ≤ | q | ≤ 512)
α ≠ 1, α < p , mod p = 1.
VýpočetBěloruský standard poskytuje následující protokol pro generování slepého podpisu k dokumentu M :
V tomto popisu jsou použity následující parametry: q je modul použitý pro výpočty, jednoduchý; a je nadřazený prvek; x - soukromý klíč; y je veřejný klíč [9] .
Nechť jsou veřejné klíče vlastněné uživateli s . Nechť je zpráva M , kterou chce podepsat m z nich. V tomto případě lze všechny podpisy sloučit do jednoho, jehož délka se rovná délce podpisu jednoho uživatele a nezávisí na m . To se provádí podle pravidel následujícího 1 protokolu:
mod p je sdílený veřejný klíč. Na jeho základě se hromadný slepý podpis ověřuje podle následujícího algoritmu:
Protokol slepých podpisů našel nejširší uplatnění v oblasti digitálních peněz . Aby například vkladatel banku nepodvedl, lze použít následující protokol: vkladatel napíše stejnou nominální hodnotu bankovek na sto dokumentů s různými čísly a uloží je v zašifrované podobě do banky. Banka vybírá náhodně a požaduje otevření 99 (nebo n-1) obálek, ujišťuje se, že je všude napsáno 10 USD, a ne 1000 USD, a zbývající obálku naslepo podepíše, nevidí číslo účtu.
Může být poskytnuta jednodušší možnost: banka má svůj vlastní pár veřejných klíčů přiřazený ke každé nominální hodnotě směnky. Pod podpisem se pak posílá pouze číslo bankovky a není potřeba před podpisem kontrolovat nominální hodnotu [1] .
Při tajném hlasování se používají slepé podpisy . V protokolu Fujioky, Okamota a Oty volič připraví hlasovací lístek se svou volbou, zašifruje jej tajným klíčem a zamaskuje. Dále volič podepíše hlasovací lístek a zašle jej validátorovi. Validátor ověří, že podpis patří registrovanému voliči, který ještě nehlasoval.
Pokud je hlasovací lístek platný, validátor lístek podepíše a vrátí jej voliči. Volič sejme převlek, čímž odhalí zašifrovaný hlasovací lístek podepsaný validátorem. Následně volič takto získaný podepsaný a zašifrovaný hlasovací lístek zašle přepážce, která zkontroluje podpis na zašifrovaném hlasovacím lístku.
Je-li hlasovací lístek platný, skrutátor jej zařadí na seznam, který se po skončení celého hlasování zveřejní. Po zveřejnění seznamu voliči zkontrolují, zda jsou jejich hlasovací lístky na seznamu, a zašlou sčítacímu komisaři dešifrovací klíče potřebné k otevření jejich hlasovacích lístků. Skrutátor používá tyto klíče k dešifrování hlasovacích lístků a přidává hlas k celkovému počtu. Po volbách skrutátor vydá dešifrovací klíče spolu se zašifrovanými hlasovacími lístky, aby si voliči mohli nezávisle ověřit volby [10] .
Algoritmus RSA může být objektem útoku, díky kterému je možné dešifrovat dříve naslepo podepsanou zprávu a vydávat ji za zprávu, která ještě nebyla podepsána. Na základě skutečnosti, že proces podepisování je ekvivalentní dešifrování podepisujícím (pomocí jeho soukromého klíče), může útočník podepsat již slepě podepsanou verzi zprávy zašifrovanou veřejným klíčem podepisujícího, tedy podepsat zprávu .
kde je zašifrovaná verze zprávy. Jakmile je zpráva podepsána, lze prostý text snadno získat:
kde je Eulerova funkce . Nyní lze zprávu snadno přijmout.
Útok funguje, protože v tomto schématu podepisující přímo podepisuje samotnou zprávu. Naproti tomu v konvenčních podpisových schématech podepisující osoba typicky podepisuje například kryptografickou hashovací funkci . Kvůli této multiplikativní vlastnosti RSA by proto nikdy neměl být použit stejný klíč jak pro šifrování, tak pro slepé podepisování [8] .