剪贴板存储在内存中的哪个位置?可以换掉吗?

时间:2016-02-17 18:29:49

标签: security memory encryption operating-system clipboard

上下文:

我开始开发密码管理器(仅用于学习目的)。我现在的目标是将解密的密码复制到剪贴板,因此可以在其他地方使用。为了避免交换解密密码,我必须mlock敏感数据

问题:

我现在关注的是:如果我将解密的密码复制到剪贴板,是否可以交换?有没有办法防止它被交换?

奖金问题:

实际存储剪贴板的内存空间在哪里?它是在进程的内存空间中调用剪贴板来存储数据还是在OS内存空间中?

是否可以将密码保存在剪贴板中,并在用户粘贴时解密?像事件或信号一样

如果它依赖于操作系统,请解释差异。

1 个答案:

答案 0 :(得分:1)

在OS X中,看起来任何使用当前用户权限运行的应用程序都可以随时更改剪贴板内容,无论它是否具有焦点。

以下命令行脚本将很乐意在后台运行,定期将ROT13应用于剪贴板内容:

while true ; do sleep 1 ; pbpaste | tr A-Za-z N-ZA-Mn-za-m | pbcopy ; done &

这表明:

  • 剪贴板存储在OS存储空间中,
  • 您复制到剪贴板的任何内容都可以立即用于属于您的每个进程。

幸运的是,Apple的Keychain Access utility使得在访问存储密码时无需使用剪贴板。我认为任何体面的钥匙串软件也会以这种方式运行。

但是,没有理由不加密发送到剪贴板的数据。使用适当的authentication,可以在检测是否发生任何篡改的同时保密数据。 (但显然你粘贴剪贴板的应用程序必须能够再次解密它。)