Windless
订阅/Feed
稗田千秋(i@wind.moe)

当Yubikey(私钥)丢了之后

看着前两篇博客,心塞塞的。

首先,绝对不要把装着私钥的U盘和Yubikey绑在一起,绝 对 不 要。当然,除了我这种萌二应该没人会这么干...

我也不抱着能找回的心态了,我丢过的U盘向来都是被捡到的人直接格式化一波带走=。=

于是记下来以防剩下的这把Yubikey丢失。

最后,容灾备份还是很关键的,我的新 GPG 公钥 EB57 A51B 1C23 0614

不想说话小千秋
Mar.10 2017 security

Yubikey 4 使用探索

平安夜舍友都出去浪了,只有我这种单身汪孤零零的在宿舍写着博客 (′_>′ )

心痒Yubikey很久了,恰逢黑五活动,想着能多出个赠品进行容灾备份,走的顺丰转运到今天正好一个月到手,参照匮乏的资料在Arch上面试了一些功能。

稗田千秋
Dec.25 2016 daily

实现简单的OTP Generator

之前曾尝试给博客添加了一个 OTP 认证,不过是引用某第三方认证 API,经常会导致请求超时等不可料错误,于是就尝试寻找着在后端本地实现的方法,发现了 PyOTP 这个库,在浅读了源码以及相关文档之后初步了解了 OTP 实现的原理,所以记下来备份。

OTP

OTP(One Time Password,动态密码),一般用来实现双因子认证,通过特殊的构造和哈希,实现了“动态”的特性,可以有效防止重放攻击(Replay Attacks),大大增加暴力破解成本(虽然在被爆破的时候小站服务器肯定先挂了XD

主要的验证方式有两种,HOTP(HMAC-Based One-Time Password)和 TOTP(Time-Based One-Time Password),像常用的 Google authenticator,开启二步验证之后会给予一个二维码,用对应 APP 扫描一下即可得到六位验证码,当然此时若是使用二维码识别工具的话也能发现这个二维码其实就是一段 URI Scheme,诸如 otpauth://totp/Windless:i%40wind.moe?issuer=chiaki&secret=secretkey&algorithm=SHA256

注意到其中传递了密钥 secret 以及摘要算法类型,这样只要客户端与服务端的实现是一致的,就能保证在同一时间得出的 OTP 是一致的。

稗田千秋
Nov.15 2016 code

GnuPG使用笔记

GNU Privacy Guard(GnuPG或GPG)是一个非对称加密软件,常用于个人加密或签名,为了取代商用的PGP软件而遵循GPL协议开发。目前有1.x和2.x两个分支,本文仅介绍2.x分支,二者共通。

非对称加密

非对称加密(Asymmetric Cryptography),也称公开密钥加密(Public-Key Cryptography,公钥加密),是一种密码学类型,解决了"双方如何在不预先交换信息的情况下进行安全通信"的问题。

在这种加密方法中,需要一对密钥,这两个密钥数学相关,公开的密钥称为公钥,不公开的则称为私钥,简单来说就是公钥加密信息,私钥解密信息,比如要对某个人发送加密信息,首先得到对方的公钥对信息进行加密,将密文发给对方,对方再用私钥解密即可得到你要发送的信息。

常见公钥加密算法:RSA / ElGamal / ECC 等

56iX55Sw5Y2D56eL
Feb.01 2016 code

CBC 字节翻转攻击

Doge 昨天晚上大佬在群里发了一道题,原题如下

< !-- please login as uid=1! -- > 
< ?php 
    include ("AES.php"); 
    highlight_file('index.php');
    $v = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890auid=9;123123123123"; 
    $b = array(); 
    $enc = @encrypt($v); 
    $b = isset($_COOKIE[user])?@decrypt(base64_decode($_COOKIE[user])):$enc; 
    $uid = substr($b,strpos($b,"uid")+4,1); 
    echo 'uid:'.$uid.'< br/>'; 
    if ($uid == 1){ 
            echo $flag; 
    } 
    else { 
            echo "Hello Client!"; 
    } 
    setcookie("user",base64_encode($enc)); 
?> 
uid:�
Hello Client!

读了题目可以发现最后要求的是使得最后的 $b 里面包含 uid=1,在代码最后面可以发现将密文进行base64加密后存进了cookie,使用 EditThisCookie 读取cookie后发现并不是base64编码,有点懵,经大佬点醒之后突然发现这是自动进行了url encode,然后因为是密文分组,又根据上面所引入的 AES.php 推测可能是CBC字节翻转攻击。

稗田千秋
Jan.10 2016 security
  • play_arrow

About this site

version:1.02 Alpha
博客主题: Lime
联系方式: i@wind.moe
写作语言: zh_CN & en_US
博客遵循 CC BY-NC-SA 4.0许可进行创作

此外,本博客会基于访客的Request Headers记录部分匿名数据用于统计(Logger的源码见Github),包含Referer, User-Agent & IP Address.个人绝不会主动将数据泄露给第三方