使用 Yubikey 在 Windows 和 macOS 下提供 SSH 私钥

使用前提

Yubikey已配置GPG-Key.

MacOS

MacOS 使用 Yubikey提供的SSH私钥

MacOS需要使用 gpg-agent 和 pinentry-mac 来实现.

1. 安装gnupgpinentry-mac

可以通过Homebrew管理安装

brew install gnupg pinentry-mac

3. gpg-key

确认已导入GPG-Key

3. 配置系统文件

.zshrc 中添加如下两行:

export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent

在~/.gnupg/gpg-agent.conf 中添加:

pinentry-program /url/local/bin/pinentry-mac # 改成你自己的位置
enable-ssh-support

4. 确认

  1. 通过 ssh-add -L 来查看是否生效
  2. 如果遇到问题,使用 gpg-connect-agent /bye 来重新连接 gpg-agent.

Git 使用 Yubikey的GPGKey签名

1. 查看私钥

gpg --list-secret-keys --keyid-format LONG

2. Git配置GPG密钥

git config --global user.signingkey YOUR_KEY_ID

3. GIT签名

git commit -S -m message

布隆过滤器

简介

1970年布隆提出了布隆过滤器(Bloom Filter)。

布隆过滤器上是一个很长的二进制向量和一系列随机映射函数。它可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

布隆过滤器(Bloom Filter)本质上是由长度为 m 的位向量或位列表(仅包含 0 或 1 位值的列表)组成,最初所有的值均设置为 0,为了将数据项添加到布隆过滤器中,会提供K个不同的哈希函数,并将结果位置上对应位的值置为 “1”。

哈希碰撞导致的巧合而将不同的元素存储在相同的比特位上,会产生误报的情况。布隆过滤器有一个可预测的误判率(FPP):

  • n是已添加的元素数量
  • m是布隆过滤器的长度(如比特数组的大小)
  • k是哈希的此时

当我们搜索一个值的时候,若该值经过 K 个哈希函数运算后的任何一个索引位为 ”0“,那么该值肯定不在集合中。但如果所有哈希索引值均为 ”1“,则只能说该搜索的值可能存在集合中。

布隆过滤器应用场景

  • 网页爬虫对URL去重,避免爬取相同的URL地址
  • 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱
  • Google Chrome 使用布隆过滤器识别恶意 URL
  • Google BigTable,Apache HBbase 和 Apache Cassandra 使用布隆过滤器减少对不存在的行和列的查找