jak by se měly generovat klíče api?
<p>chci se ujistit, že žádosti nelze zfalšovat a odeslat na můj server. k tomu potřebuji vygenerovat api klíč na uživatele v mém systému. účelem tohoto klíče bude podepsat žádosti na straně klienta a ověřit je na serveru.</p><p>otázka zní, z čeho jsou klíče api obvykle tvořeny? jsou to jen kryptograficky bezpečné náhodné číslo (podobné soli se heslem)? nebo je za nimi nějaká logika, např. pokud by se skládaly z údajů specifických pro uživatele.</p><p>v mém systému již každý uživatel má jedinečné id (guid), které není veřejně vystaveno, mohl bych to použít jako svůj „klíč“ nebo by se měl api api lišit od id uživatele?</p>
<p>záleží na tom, jak moc chcete oddělit role.</p><p><strong> základní systém: </strong> váš „podpis“ je <a href="http://en.wikipedia.org/wiki/message\_authentication\_code"> mac </a> . „klíč api“ je tajná hodnota, se kterou se sdílí server a uživatel. normální mac algoritmy jako <a href="http://en.wikipedia.org/wiki/hmac"> hmac </a> mohou používat libovolné sekvence bitů jako klíč, takže klíč lze snadno vygenerovat pomocí <code>/dev/urandom</code> (linux, * bsd , macos x), volání <code>cryptgenrandom()</code> (win32) nebo pomocí <code>java.security.securerandom</code> (java).</p><p><strong> vylepšený systém: </strong> váš podpis je skutečný <a href="http://en.wikipedia.org/wiki/digital\_signature">digitální podpis</a> . to má smysl, pokud chcete oddělit generátor klíčů (který může vytvářet klíče, které bude server akceptovat), od samotného serveru (který ověřuje příchozí podpisy). klíče pro algoritmy podpisu jsou matematické objekty se spoustou vnitřní struktury a každý algoritmus zahrnuje specifický algoritmus generování klíčů. použijte knihovnu, která již implementuje potřebné bity (např. <a href="http://www.openssl.org/">openssl</a> ).</p><hr><p><strong> v každém případě </strong> je toho více než jen generování klíčů a podpisy. například se pravděpodobně chcete vyhnout <em>opakované útoky</em>: špatně zamýšlená třetí strana špehuje v síti a zaznamenává platnou žádost podepsanou běžným uživatelem. útočník později odešle požadavek znovu, doplněný jeho podpisem, aby se účinek replikoval. abyste se vyhnuli opakovaným útokům, musíte přidat nějaký externí protokol a tyto věci je obtížné udělat (není těžké definovat protokol; je <em>velmi</em> obtížné definovat <em>zabezpečené]</em> protokol). chytrá věc je proto opětovné použití existujícího, dobře prověřeného protokolu, což v praxi znamená <a href="http://en.wikipedia.org/wiki/transport\_layer\_security">ssl/tls</a> .</p><p>u ssl je „základní systém“ omezen na odesílání klíče api v záhlaví na začátku konverzace (to je přesně to, co se děje při ověřování hesla na webech https). "rozšířený systém" je pak "ssl s klientským certifikátem".</p>
<p>rozhraní api <a href="http://codex.wordpress.org/widgets\_api#developing\_widgets\_on\_2.8.2b">widgetů</a> je nejrychlejší způsob, jak vytvořit widget, který lze znovu použít. příklad použití:</p><pre><code>class my\_widget extends wp\_widget { /** * php4 constructor */ function my\_widget() { my\_widget::\_\_construct(); } /** * php5 constructor */ function \_\_construct() { // actual widget processes } /** * echo the settings update form * * @param array $instance current settings */ function form($instance) { // outputs the options form on admin } /** * update a particular instance * * @param array $new\_instance new settings for this instance as input by the user via form() * @param array $old\_instance old settings for this instance * @return array settings to save or bool (false) to cancel saving */ function update($new\_instance, $old\_instance) { // processes widget options to be saved } /** * echo the widget content * * @param array $args display arguments including before\_title, after\_title, before\_widget, and after\_widget * @param array $instance the settings for the particular instance of this widget */ function widget($args, $instance) { // outputs the content of the widget } } register\_widget('my\_widget'); </code></pre> Aby bylo možné vidět všechny klíče (které nejsou skryté), že blok šifrovaným datům zašifrovaná, aby - včetně sami - můžete jednoduše vytvořit svůj tajný-keyring dispozici přes něco takového:



```
gpg --no-default-keyring --secret-keyring /dev/null -a --list-only

```

Který říká gpg nepoužívat žádné výchozí klíčenky (-no-default-přívěšek na klíče), je-li zadán neplatný / chybějící klíčenku, a pak jde o to určit neplatné / chybějící tajné klíčenku (--secret-klíčenka / dev / null ) Predevším to znamená, že heslo bylo příliš snadno uhodnutelné (nick monk, heslo moncicak - to jen jako příklad) a hlavně podle všeho navíc všude stejné. Takže nové heslo musí splňovat nějaké parametry a pro každou službu použít jiné a tam kde je to možné použít dvouúrovňové ověření. To by pro začátek mohlo stačit. Na vytváření dokumentu v pdf používám PDFcreator a tam to vše lze nastavit - zakázat tisk, kopírování nebo ochranu heslem. Když se ví jak, dá se to stejně prolomit. Tak jsem si teda zaobjevoval. Kdyby se to nekdy nekomu hodilo...awk '{ E=$0; S=":"; C=gsub(/:/,"",$0); for (i=0; i<7-C; i++){S=S "0:"}; sub("::",S,E); print E; }'A urcite by to slo napsat nejak hezceji a vic cool (a samosebou to neumi IPv6 adresy s teckama ![](/Client.Images/smileys/4.gif) , ale ty se moc nevyskytuji). Na zrizeni serveru potrebujete mit server.  
Ma-li byt server dostupny z internetu, potrebujete nejake vhodne pripojeni a verejnou IP adresu.  
Na nektere sluzby je vhodne mit domenu, ale neni to podminka.  
  
Co a pro koho chcete na serveru zpristupnovat? Casto byva lepsi vyuzit serverhostingu nebo si pronajmout server cely ci jeho cast... Ale prd, jistěže to něco zaručuje. Zaručuje to, že ti nikdo FB nehackne. To že ty potom svojí neschopností to heslo sám zadáš na falešné stránce nebo si ho necháš nějakým keyloggerem ukrást z počítače a nebo, což je nejpravděpodobnější, používáš ho na více dalších službách, to není hackování, ale hloupost uživatele. Našel jsem důvod. GPGee má volbu „--encrypt\_to\_self“ a je ve výchozím nastavení povolena. Takže pokud by někdo chtěl udělat z příkazového řádku by měl napsat něco takového



```
gpg -e user_to_encrypt --encrypt-to your_user filename

``` K ověření z aplikace pro iPhone, budete muset:


1. Zakázat křížový dotaz site padělání pro akce formuláře
2. HTTP POST user\_session [uživatelské jméno] a user\_session [heslo] na váš FQDN + '/' user\_sessions
3. Zachytit relace cookie vrácené z místa (a vrátit ty s následnými žádostmi), aby podnikla další kroky v žádosti.


V závislosti na tom, co váš celkový cíl je, možná by bylo lepší napsat vlastní ověření kus, který by používal iPhone interní ID a kombinace uživatelského jména a hesla vytvořit jedinečný klíč použít pro sezení na místě. [Android vestavby wiki](http://groups.google.com/group/android-internals) je dobrým výchozím bodem, a zahrnuje [odkaz](http://benno.id.au/blog/2007/11/13/android-native-apps) vysvětluje, jak sestavit jednoduché nativních aplikací.


[ScratchBox](http://www.macrobug.com/blog/2007/11/25/using-scratchbox-to-build-complex-arm-binaries-for-android/) se zdá být cesta k sestavení složitějších aplikací a knihoven, jak asi víte už. Osobně bych doporučoval kontaktovat ty lidi dostat vliv na projektu OpenSSL.