Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-03-29T08:38:09+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Sécuriser un token dans une base de donnée, message #2178712020-03-29T08:38:09+02:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217871<figure><blockquote>
<p>Idée : stocke simplement le token en RAM sur ton backend et assure-toi que ces tokens ont une validité courte auprès du service tiers, à défaut donne-leur une vie courte sur ton backend. Tout ce que pourra faire un tiers malveillant c’est pénétrer ton backend (ce qui est déjà censé être difficile, c’est la première règle d’or), et analyser la RAM pour retrouver les tokens, ce qui n’est pas facile non plus. Si toutefois il y arrive, la moitié de ces tokens seront expirés avant qu’il les exploite. Ne t’inquiète pas pour l’usage RAM, un token disons que c’est de l’ordre de 128 octets, même si mettons tu les stockes 5 minutes, avec 10000 utilisateurs / 5 min tu n’es qu’à 1 Mo en RAM par exemple. Tu peux ajouter des sécurités du style : toute connexion SSH à la machine déclenche la purge de tous les tokens stockés : si quelqu’un se connecte à ta machine, tout est effacé.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217847">Society</a></figcaption></figure>
<p>J’aimerais pouvoir garder les tokens aussi longtemps que possible pour éviter que l’utilisateur s’authentifie de nouveau.</p>
<p>Pour info, je suis en train de développer une app où l’utilisateur peut se connecter à ses réseaux sociaux afin d’obtenir certaines informations. La façon dont les tokens doivent être gérés doit donc être similaire à Hootsuite <a href="https://hootsuite.com/platform/monitoring">https://hootsuite.com/platform/monitoring</a></p>
<div class="video-container"><div class="video-wrapper"><iframe src="https://www.youtube.com/embed/Bg1BcNDXBi4?feature=oembed" width="560" height="315" allowfullscreen frameborder="0"></iframe></div></div>
<p>Ça fait pas mal de temps que j’utilise leur service (plus d’un an) et jusqu’à présent je n’ai jamais eu à m’identifier à nouveau sur Facebook, Instragram, etc. Je me demande donc comment ils font pour gérer les tokens et la sécurité.</p>Sécuriser un token dans une base de donnée, message #2178702020-03-29T08:20:44+02:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217870<figure><blockquote>
<blockquote>
<p>Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.</p>
</blockquote>
<p>Si je comprends correctement, c’est un token temporaire, le temps de travailler avec l’API. Alors pourquoi ce besoin de le stocker en premier lieu ? Si tu as besoin de l´API plus tard, tu redemandes simplement un nouveau token.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217846">sgble</a></figcaption></figure>
<p>Non le token est à longue durée car l’utilisateur peut faire différents appels qui nécessitent d’utiliser l’API tier.</p>Sécuriser un token dans une base de donnée, message #2178472020-03-28T14:55:08+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217847<p>Idée : stocke simplement le token en RAM sur ton backend et assure-toi que ces tokens ont une validité courte auprès du service tiers, à défaut donne-leur une vie courte sur ton backend. Tout ce que pourra faire un tiers malveillant c’est pénétrer ton backend (ce qui est déjà censé être difficile, c’est la première règle d’or), et analyser la RAM pour retrouver les tokens, ce qui n’est pas facile non plus. Si toutefois il y arrive, la moitié de ces tokens seront expirés avant qu’il les exploite. Ne t’inquiète pas pour l’usage RAM, un token disons que c’est de l’ordre de 128 octets, même si mettons tu les stockes 5 minutes, avec 10000 utilisateurs / 5 min tu n’es qu’à 1 Mo en RAM par exemple. Tu peux ajouter des sécurités du style : toute connexion SSH à la machine déclenche la purge de tous les tokens stockés : si quelqu’un se connecte à ta machine, tout est effacé.</p>Sécuriser un token dans une base de donnée, message #2178462020-03-28T13:54:00+01:00sgble/@sgblehttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217846<blockquote>
<p>Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.</p>
</blockquote>
<p>Si je comprends correctement, c’est un token temporaire, le temps de travailler avec l’API. Alors pourquoi ce besoin de le stocker en premier lieu ? Si tu as besoin de l´API plus tard, tu redemandes simplement un nouveau token.</p>Sécuriser un token dans une base de donnée, message #2178412020-03-28T13:15:14+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217841<figure><blockquote>
<p><em>« Comment répondre à mon besoin sans avoir à stocker un token dans une base de données »</em>.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217837">SpaceFox</a></figcaption></figure>
<p>Pourquoi "sans avoir à stocker un token dans une base de données"?</p>Sécuriser un token dans une base de donnée, message #2178372020-03-28T12:14:12+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217837<p>De mon point de vue, ton problème n’est pas <em>« Comment sécuriser un token dans une base de données »</em> mais <em>« Comment répondre à mon besoin sans avoir à stocker un token dans une base de données »</em>.</p>Sécuriser un token dans une base de donnée, message #2178282020-03-28T09:41:59+01:00RaphaelR/@RaphaelRhttps://zestedesavoir.com/forums/sujet/13814/securiser-un-token-dans-une-base-de-donnee/?page=1#p217828<p>Bonjour à tous!</p>
<p>Je développe une application où j’ai besoin d’utiliser un service tier qui me retourne un token d’accès. J’ai besoin de stocker ce token en base de donnée car l’application charger doit certaines informations à son lancement et pour éviter que l’utilisateur ait à saisir son identifiant et mot de passe pour se connecter au service tier à chaque fois.</p>
<p>Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.</p>
<p>J’ai donc décidé d’encrypter le token en utilisant le mot de passe de l’utilisateur, seulement j’ai besoin de faire des appels d’API à différents moments et pour cela la clé (le mot de passe) dois être toujours accessible depuis le front end. J’envisage de le stocker dans le localStorage, mais ça veux dire que le mot de passe est clairement visible sur le navigateur et ce n’est pas recommandé.</p>
<p>Une autre solution auquelle j’ai pensé est de générer une clée unique pour l’utilisateur, la stocker en base de donnée et ensuite l’utiliser en tant que clée pour encrypter/décrypter les tokens. Mais cela veut dire que la clé sera accessible pour quelqu’un ayant accès à la base de donnée, de plus si je stocke la clé dans le localStorage je me retrouve dans la même situation qu’avec le mot de passe.</p>
<p>Je suis très confus sur la façon de faire afin que ce soit sécurisé. Quelqu’un a t-il déjà eu des cas similaires, que pourait être la solution?</p>
<p>J’utilise Node.js pour mon backend et le module crypto pour l’encryption.</p>accéder aux champs d'une structure pointé, message #2145352020-01-25T13:22:14+01:00albeet678/@albeet678https://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214535<p>best dental clinic in dubai<a href="https://americanmdcenter.com/"></a></p>accéder aux champs d'une structure pointé, message #2145162020-01-25T01:34:23+01:00jo_link_noir/@jo_link_noirhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214516<p>Les EVP* sont des interfaces privées, tu ne peux pas accéder aux champs, il faut passer par l’API public -> les fonctions. C’est ainsi pour de bonne raison lié à la compatibilité binaire sur les mises à jour.</p>
<p>Je ne sais pas d’où te vient l’idée de faire <code>*ppkey.(fonction de EVP_PKEY_ASN1_METHOD)</code>, mais cela montre clairement qu’il te manque les bases. Tu devrais d’abord lire un cours.</p>accéder aux champs d'une structure pointé, message #2145102020-01-24T23:12:10+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214510<p>J’ai trouver différentes fonctions pour décoder des clée :
X509_PUBKEY_get0(), X509_PUBKEY_set() et EVP_PKEY_asn1_add0 ( 3) qui font parti des methodes EVP_PKEY_ASN1_METHOD d’aprés ce que j’ai compris, voici le lien pour ces methodes :
<a href="https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_asn1_copy.html">https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_asn1_copy.html</a>
j’ai aussi trouver la structure EVP_PKEY le voici :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-cpp"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">evp_pkey_st</span> {</span>
<span class="hljs-comment">/* == Legacy attributes == */</span>
<span class="hljs-keyword">int</span> type;
<span class="hljs-keyword">int</span> save_type;
<span class="hljs-keyword">const</span> EVP_PKEY_ASN1_METHOD *ameth;
ENGINE *engine;
ENGINE *pmeth_engine; <span class="hljs-comment">/* If not NULL public key ENGINE to use */</span>
<span class="hljs-keyword">union</span> {
<span class="hljs-keyword">void</span> *ptr;
<span class="hljs-meta"># <span class="hljs-meta-keyword">ifndef</span> OPENSSL_NO_RSA</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">rsa_st</span> *<span class="hljs-title">rsa</span>;</span> <span class="hljs-comment">/* RSA */</span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">endif</span></span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">ifndef</span> OPENSSL_NO_DSA</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">dsa_st</span> *<span class="hljs-title">dsa</span>;</span> <span class="hljs-comment">/* DSA */</span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">endif</span></span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">ifndef</span> OPENSSL_NO_DH</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">dh_st</span> *<span class="hljs-title">dh</span>;</span> <span class="hljs-comment">/* DH */</span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">endif</span></span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">ifndef</span> OPENSSL_NO_EC</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ec_key_st</span> *<span class="hljs-title">ec</span>;</span> <span class="hljs-comment">/* ECC */</span>
ECX_KEY *ecx; <span class="hljs-comment">/* X25519, X448, Ed25519, Ed448 */</span>
<span class="hljs-meta"># <span class="hljs-meta-keyword">endif</span></span>
} pkey;
</code></pre></div>
<p>et normalement je devrais pouvoir y accéder de 2 façon différentes : </p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span></div><pre><code class="hljs language-shell">(*ppkey).ameth
<span class="hljs-meta">ppkey-></span><span class="bash">ameth</span>
</code></pre></div>
<p>mais ce n’est pas le cas sauf si pour accéder à EVP_PKEY_ASN1_METHOD je devais faire
*ppkey.(fonction de EVP_PKEY_ASN1_METHOD)</p>accéder aux champs d'une structure pointé, message #2143872020-01-23T07:50:11+01:00gbdivers/@gbdivershttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214387<p>OpenSSL. Mais ca reste une question C. Mais c’est un detail.</p>accéder aux champs d'une structure pointé, message #2143842020-01-23T07:43:21+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214384<p>Normalement on peut utliser openssl pour des programmes C++ et c’est pour cette raison que j’ai choisi openssl.
Quelle serait la bibliothéque la plus adapter pour coder en C++ ?</p>accéder aux champs d'une structure pointé, message #2143792020-01-23T00:49:22+01:00gbdivers/@gbdivershttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214379<p>J’aurais tendance a dire que si tu n’arrives pas à trouver cette info par toi même, c’est que tu fais probablement des choses qui te dépassent et ça va tout faire peter.</p>
<p>EVP_PKEY est un typedef de evp_pkey_st et cette structure est définie dans evp.h.</p>
<p>Hors sujet : c’est du C, pas du C++.</p>accéder aux champs d'une structure pointé, message #2143782020-01-23T00:32:37+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214378<figure><blockquote>
<p>Comment tu sais que tu cherches tes données dans cette structure si tu ne connais pas les champs x)</p>
<p></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214286">romantik</a></figcaption></figure>
<p>Parce que d’après ce que j’ai compris en lisant la doc, la clée est stocker dans la structure EVP_PKEY et accesible par ppkey.</p>
<figure><blockquote>
<p>et pour obtenir le contenu de tes variables</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-C"> <span class="hljs-function"><span class="hljs-keyword">const</span> <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">char</span> *<span class="hljs-title">EVP_PKEY_get0_hmac</span><span class="hljs-params">(<span class="hljs-keyword">const</span> EVP_PKEY *pkey, <span class="hljs-keyword">size_t</span> *len)</span></span>;
<span class="hljs-function">RSA *<span class="hljs-title">EVP_PKEY_get0_RSA</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">DSA *<span class="hljs-title">EVP_PKEY_get0_DSA</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">DH *<span class="hljs-title">EVP_PKEY_get0_DH</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">EC_KEY *<span class="hljs-title">EVP_PKEY_get0_EC_KEY</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
</code></pre></div>
<p>par exemple. Attention à leur utilisation.</p>
<p></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214297">neuneutrinos</a></figcaption></figure>
<p>J’utlise une EC, donc la fonction qui m’intésse doit être EVP_PKEY_get0_EC_KEY();
et je l’utilise comme ça :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-stylus"><span class="hljs-function"><span class="hljs-title">EVP_PKEY_get0_EC_KEY</span><span class="hljs-params">(*pkey)</span></span>
</code></pre></div>
<p>Le probléme et que le programme ne compile pas à cause d’une erreur, que voici :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-subunit"><span class="hljs-keyword">error: </span>cannot convert 'EVP_PKEY' {aka 'evp_pkey_st'} to 'EVP_PKEY*' {aka 'evp_pkey_st*'}|
</code></pre></div>
<p>il compile uniquement que quand je fais </p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-stylus"><span class="hljs-function"><span class="hljs-title">EVP_PKEY_get0_EC_KEY</span><span class="hljs-params">(pkey)</span></span>
</code></pre></div>
<p>Mais se n’est pas pour autant que j’obtiens le contenue de la variable, ce qui est logique en mon sens puisque "pkey" est juste l’addresse de la variable.
voici mon code en entier :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-cpp"> EVP_PKEY_CTX *ctx = <span class="hljs-literal">NULL</span>;
<span class="hljs-keyword">if</span>(!EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, NID_secp256k1))
{
<span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> << <span class="hljs-string">"error 1 "</span> << <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
}
<span class="hljs-keyword">else</span>
{
EVP_PKEY *pkey = <span class="hljs-literal">NULL</span>;
ENGINE *e = <span class="hljs-literal">NULL</span>;
<span class="hljs-keyword">if</span>(EVP_PKEY_get0_EC_KEY(*pkey) != <span class="hljs-literal">NULL</span>)
{
<span class="hljs-keyword">if</span>(!(ctx = EVP_PKEY_CTX_new(pkey, e)))
{
<span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> << <span class="hljs-string">"bien 1"</span> << <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-keyword">if</span>(!(ctx = EVP_PKEY_CTX_new_id(NID_secp256k1, e)))
{
<span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> << <span class="hljs-string">"bien 2"</span> << <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
}
}
EVP_PKEY *ppkey = <span class="hljs-literal">NULL</span>;
<span class="hljs-keyword">if</span> (<span class="hljs-number">1</span> != EVP_PKEY_keygen(ctx, &ppkey))
{
<span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> << <span class="hljs-string">"error 2"</span> << <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">std</span>::<span class="hljs-built_in">cout</span> << EVP_PKEY_get0_EC_KEY(*ppkey) << <span class="hljs-built_in">std</span>::<span class="hljs-built_in">endl</span>;
}
}
</code></pre></div>
<p>A la ligne 19 je ne sais pas quel parametre mettre avec le parametre "e" car dans la doc le parametre doit être "int id" mais je ne sais pas à quoi correspond le id. Excusez moi j’ai du mal à comprendre les doc.</p>accéder aux champs d'une structure pointé, message #2142972020-01-22T14:38:11+01:00neuneutrinos/@neuneutrinoshttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214297<p>De manière propre, tu ne peux pas.
Il te faut connaitre, l’ordre de trs prétendus champs, l’alignement mémoire … et le type de chaques champs.</p>
<p>Il y a deux possibilités.
(1) La structure est visible dans le header (evp.h ou récursivement dans tous les includes) et dans ce cas, pas de probème !
(2)La structure n’est pas dispo , dans ce cas , tu es obligé de passer par des fonctions pour définir/modifier/utiliser les éléments de ta variable structure (EVP_PKEY)</p>
<p>Et c’est le (2) ici.</p>
<p>Comment définir une variable de type EVP_PKEY ? (EVP_PKEY_new)
<a href="https://www.openssl.org/docs/manmaster/man3/EVP_PKEY_new.html">https://www.openssl.org/docs/manmaster/man3/EVP_PKEY_new.html</a></p>
<p>Comme toute allocation, il faudra penser à libérer la mémoire. (EVP_PKEY_free)
<a href="https://www.openssl.org/docs/manmaster/man3/EVP_PKEY_free.html">https://www.openssl.org/docs/manmaster/man3/EVP_PKEY_free.html</a></p>
<p>Et il faudra passer par des fonctions pour modifier la variable.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-C"> <span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">EVP_PKEY_set1_RSA</span><span class="hljs-params">(EVP_PKEY *pkey, RSA *key)</span></span>;
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">EVP_PKEY_set1_DSA</span><span class="hljs-params">(EVP_PKEY *pkey, DSA *key)</span></span>;
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">EVP_PKEY_set1_DH</span><span class="hljs-params">(EVP_PKEY *pkey, DH *key)</span></span>;
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">EVP_PKEY_set1_EC_KEY</span><span class="hljs-params">(EVP_PKEY *pkey, EC_KEY *key)</span></span>;
</code></pre></div>
<p>il y a aussi avec "assign" au lieu de set…</p>
<p>et pour obtenir le contenu de tes variables</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-C"> <span class="hljs-function"><span class="hljs-keyword">const</span> <span class="hljs-keyword">unsigned</span> <span class="hljs-keyword">char</span> *<span class="hljs-title">EVP_PKEY_get0_hmac</span><span class="hljs-params">(<span class="hljs-keyword">const</span> EVP_PKEY *pkey, <span class="hljs-keyword">size_t</span> *len)</span></span>;
<span class="hljs-function">RSA *<span class="hljs-title">EVP_PKEY_get0_RSA</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">DSA *<span class="hljs-title">EVP_PKEY_get0_DSA</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">DH *<span class="hljs-title">EVP_PKEY_get0_DH</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
<span class="hljs-function">EC_KEY *<span class="hljs-title">EVP_PKEY_get0_EC_KEY</span><span class="hljs-params">(EVP_PKEY *pkey)</span></span>;
</code></pre></div>
<p>par exemple. Attention à leur utilisation.</p>accéder aux champs d'une structure pointé, message #2142862020-01-22T14:15:02+01:00romantik/@romantikhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214286<p>Salut,</p>
<p>Comment tu sais que tu cherches tes données dans cette structure si tu ne connais pas les champs x)</p>
<p>Quoi qu’il en soit, regarde sa doc, sinon regarde sa déclaration, et tu trouveras les noms des champs. Un bon editeur te les propose en auto-completion aussi normalement.</p>accéder aux champs d'une structure pointé, message #2142742020-01-22T12:12:34+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13530/acceder-aux-champs-dune-structure-pointe/?page=1#p214274<p>Bonjour comment accéder au champs d’une structure dont on ne connait pas le nom des champs ?
yaurais t-il pas une fonction qui permet d’accéder directement a la premier valeur de la structure ?
EVP_PKEY <em>ppkey;
je shouhaite accéder au donnée EVP_KEY en passant par le pointeur </em>ppkey, normalement je devrais faire
ppkey->nomduchamp; mais je ne connais pas le nom des champs.
Alors comment y accéder sans nom de champs ? Où peut-on trouver le détaille de la structure EVP_PKEY ?<br>
merci de vos futur réponse.</p>utiliser une bibliothèques, c++, message #2125012019-12-24T23:46:59+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13368/utiliser-une-bibliotheques-c/?page=1#p212501<p>Merci de t’a réponse <a href="/membres/voir/sgble/" rel="nofollow" class="ping ping-link">@<span class="ping-username">sgble</span></a>,
je shouterais générer des paires de clé public et privée et je pense que la fonctions adapter est <code>int EC_KEY_generate_key(EC_KEY *key);</code> mais je ne sais pas comment l’utliser et j’ai du mal a comprendre la doc openssl, voici ce qui est dit dans la doc :</p>
<p>EC_KEY_generate_key génère une nouvelle clé publique et privée pour l' objet eckey fourni . eckey doit avoir un objet EC_GROUP associé avant d’appeler cette fonction. La clé privée est un entier aléatoire (0 <clé_privée <ordre, où ordre est l’ordre de l’objet EC_GROUP). La clé publique est un EC_POINT sur la courbe calculé en multipliant le générateur de la courbe par la clé privée.</p>
<p>Pouvez vous m’aidez svp ? Il n’ya aucun tuto sur l’utlisation d’openssl <img src="/static/smileys/pleure.png" alt=":'(" class="smiley"> </p>utiliser une bibliothèques, c++, message #2124862019-12-24T14:23:06+01:00sgble/@sgblehttps://zestedesavoir.com/forums/sujet/13368/utiliser-une-bibliotheques-c/?page=1#p212486<p>Si tu es sous un Unix, la doc est accessible dans les pages <code>man</code>.</p>
<p>Par exemple, <code>man crypto</code> donne :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-shell">CRYPTO(7SSL) OpenSSL CRYPTO(7SSL)
NAME
crypto - OpenSSL cryptographic library
SYNOPSIS
See the individual manual pages for details.
DESCRIPTION
The OpenSSL crypto library implements a wide range of cryptographic algorithms used in various Internet standards. The services
provided by this library are used by the OpenSSL implementations of SSL, TLS and S/MIME, and they have also been used to implement SSH,
OpenPGP, and other cryptographic standards.
</code></pre></div>
<p>En principe tu as la même chose en version Web ici : <a href="https://www.openssl.org/docs/man1.0.2/man3/">https://www.openssl.org/docs/man1.0.2/man3/</a>
(mais c’est assez indigeste, j’en conviens <img src="/static/smileys/triste.png" alt=":(" class="smiley"> Le mieux serait de trouver un bon livre ou un bon tutoriel qui expose OpenSSL je pense)</p>utiliser une bibliothèques, c++, message #2124712019-12-23T22:48:23+01:00cerveau/@cerveauhttps://zestedesavoir.com/forums/sujet/13368/utiliser-une-bibliotheques-c/?page=1#p212471<p>Ton article est très intéressant surtout que je cherche a comprendre la sécurité informatique,<br>
ton article parle du langage C , il y’a eu le même problème avec C++ ou pas ? </p>
<p>Pertinent mais Cela ne répond pas à ma question : </p>
<p>Comment utilise t-on une bibliothèque comme OpenSSL ? Exemple toi comment tu sais qu’il faut utiliser se code ? N’y a t-il pas une documentation OpenSSL ?</p>
<p>Car je cherche a générer une paire de clé public et privée à partir de l’algorithme EC(courbe elliptique), mais je ne sais pas comment utiliser l’algorithme.</p>utiliser une bibliothèques, c++, message #2124152019-12-23T08:37:34+01:00Ge0/@Ge0https://zestedesavoir.com/forums/sujet/13368/utiliser-une-bibliotheques-c/?page=1#p212415<p>Salut,</p>
<p>J’avais succinctement utilisé cette bibliothèque pour un programme d’exemple de <a href="https://zestedesavoir.com/articles/100/introduction-aux-buffer-overflows/">mon article sur les buffer overflows</a> :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-c"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><stdio.h></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><stdlib.h></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><string.h></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><openssl/crypto.h></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string"><openssl/md5.h></span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">define</span> BUFSIZE 40 <span class="hljs-comment">/* Should be enough */</span></span>
<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> </span>{
<span class="hljs-keyword">int</span> access_granted = <span class="hljs-number">0</span>;
<span class="hljs-keyword">char</span> password[BUFSIZE] = {<span class="hljs-string">'\0'</span>};
<span class="hljs-keyword">char</span> hash[<span class="hljs-number">16</span>] = {<span class="hljs-string">'\0'</span>};
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Enter the password to get the access granted! "</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%s"</span>, password);
MD5_CTX c;
MD5_Init(&c);
MD5_Update(&c, password, <span class="hljs-built_in">strlen</span>(password));
MD5_Final(hash, &c);
<span class="hljs-keyword">if</span>(<span class="hljs-built_in">memcmp</span>(<span class="hljs-string">"\x90\x6d\x6f\x6a\x61\x58\xd6\x9d\x18\x59\x85\x26\x70\xbe\xfb\x08"</span>, hash, <span class="hljs-number">16</span>) == <span class="hljs-number">0</span>) {
access_granted = <span class="hljs-number">1</span>;
}
<span class="hljs-keyword">if</span>(access_granted) {
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Access granted!\n"</span>);
execve(<span class="hljs-string">"/bin/sh"</span>, <span class="hljs-literal">NULL</span>, <span class="hljs-literal">NULL</span>);
} <span class="hljs-keyword">else</span> {
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"!!! ACCESS DENIED !!!\n"</span>);
}
<span class="hljs-built_in">exit</span>(EXIT_SUCCESS);
}
</code></pre></div>
<p>N’oublie pas d’utiliser la directive <code>-lcrypto</code> lors de l’édition de liens.</p>
<p>Ce programme met en évidence l’exploitation d’une vulnérabilité, n’hésite pas à lire l’article pour la comprendre, c’est assez formateur ! Sans prétention aucune bien sûr…</p>
<p>À+.</p>