• # KD2/Security_OTP

    Posté par (site web personnel, Mastodon) . En réponse au message TOTP facile et souverain (sans GAFAM) → quelle lib ?. Évalué à 10.

    Hello,

    c'est assez simple à coder.

    tu peux utiliser cette lib que j'ai codé pour Garradin :

    https://fossil.kd2.org/kd2fw/file?name=src/lib/KD2/Security_OTP.php&ci=tip

    Générer un code :

    echo KD2\Security_OTP::TOTP('SECRET');
    

    Vérifier un code :

    if (KD2\Security_OTP::TOTP('SECRET', 123456)) {
     echo "Code bon";
    }
    

    Les codes TOTP étant valides 30 secondes, par défaut la fonction TOTP autorise un "drift" (décalage temporel) de plus ou moins un segment de 30 secondes, pour gérer les cas de genre tu viens de lire le code sur ton téléphone, mais il expire 2 secondes plus tard, ben on l'accepte quand même. Donc on accepte par défaut un drift de +/- 1 segment de 30 secondes : on accepte le code des 30 secondes actuelles, le code des 30 secondes précédentes et le code des 30 secondes suivantes. C'est un poil moins sécurisé mais plus simple pour l'utilisateur. Tu peux changer ça avec l'argument drift.

    Attention à ce que ta machine soit à l'heure aussi. Le classe contient également une méthode pour demander l'heure à un serveur NTP (utile pour les gens qui s'auto-hébergent et qui ont parfois un serveur pas à l'heure).

    Il y a aussi une classe pour générer un QRCode en SVG :

    https://fossil.kd2.org/kd2fw/file?name=src/lib/KD2/Graphics/QRCode.php&ci=tip

    Ainsi tu peux générer un QR code simplement pour que les gens l'ajoutent au téléphone :

    use KD2\Security_OTP as OTP;
    use KD2\Graphics\QRCode;
    $secret = OTP::getRandomSecret();
    $url = OTP::getOTPAuthURL('Mon super site web', $secret);
    $qrcode = new QRCode($url);
    $qrcode_img = 'data:image/svg+xml;base64,' . base64_encode($qrcode->toSVG());
    printf('<h2>Votre code secret est : %s</h2>', $secret);
    printf('<img src="%s" alt="QRcode" />', $qrcode_img);
    

    C'est autonome, souverain, et ça marche sur Garradin :)

    « Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)