在不同IM程序之间同步OTR密钥

keysync的Python项目详细描述


keysync-一个用于所有聊天应用程序的密钥
或者一个用于MacOSX,另一个用于GNU/Linux或Windows。信任关系仅以特定于应用程序的格式本地存储在应用程序中。在所有应用程序之间切换意味着您必须管理您使用的每个应用程序的信任关系。


keysync通过允许您同步otr标识和多个应用程序之间的信任关系来解决此问题,这样就不需要在每个新客户机/设备上重新建立这些关系。它目前可以在android上的[chatsecure]和桌面上的[pidgin]、[adium]和[jitsi]上工作。


OTR协议中有一些限制,使得这一点不可能实现。



或者您可以手动将"otr\u keystore.ofcaes"
文件复制到设备的SD卡上,由Chatsecure查找。使用
chatsecure,您需要扫描keysync显示给您的qrcode,才能完成同步。对"otr_keystore.ofcaes"文件进行加密,以防止您的私人信息泄漏。qrcode是
密钥库的密码,因此不要与任何人共享。

方法如下:

1.退出所有要
2的聊天应用程序。选择要同步的应用程序
3。然后运行sync

现在,打开你的聊天应用,你应该已经同步信任!如果出现
问题,它会将原始otr文件保存到位。它们使用表示备份时间的长字符串命名。


这是测试版软件,不要依赖它进行强身份验证。它不太可能把事情搞得一团糟,以至于产生泄露的私钥,但任何事情都是可能的。另外,请记住,程序正在处理您的
专用otr密钥,因此请确保您不会在不安全的地方复制、发送或通过电子邮件发送
`otr\u keystore.ofcaes`文件。综上所述,我们非常感谢测试和反馈,因此我们可以让它达到我们可以信任它的程度。





我们关注两个主要版本:[libotr]格式和[otr4j],
,然后是这些主要格式的一些变体。只要能够被python读取和解析,就可以支持所有otr实现。

体系结构以允许扩展。如果您想添加一个尚未包含
的应用程序,只需制作一个python文件,在该应用程序的otr数据格式和keysync内部格式之间转换
(记录在下面的
)。



IT Bug报告、修补程序、拉取请求、功能
请求等。请将您的Bug和请求添加到我们的问题跟踪程序:



向我们发送电子邮件至support@guardianproject.info,询问问题等,或
只想让我们知道您正在使用keysync并发现它很有用。



install
==


keysync使用了大量python模块实现平滑同步体验。要查看
平台上使用的python模块的完整列表,请参见setup.py中的"dependencies"列表。以下是一些
关键库:

*BeautifulGroup 4-http://www.crummy.com/software/BeautifulGroup
*psutil-https://code.google.com/p/psutil
*纯python otr-https://github.com/afflux/pure python otr
*pyasn1-http://pyasn1.sourceforge.net/
*pycryptout-https://www.dlitz.net/software/pycrypto
*pyjavaproperties-http://pypi.python.org/pypi/pyjavaproperties
*pymtp-https://github.com/eighthave/pymtp
*pyparsing-http://pyparsing.wikispaces.com
*python pgpdump-https://pypi.python.org/pypi/pgpdump
*python映像库-http://www.pythonware.com/products/pil
*qrcode-https://github.com/lincolnloop/python qrcode
*tkinter-https://wiki.python.org/moin/tkinter



----


发布,
同时,您可以通过添加我们的ppa来安装keysync(fingerprint
f50eadd2234f563):

sudo add apt repository ppa:guardianproject/ppa
sudo apt get update
sudo apt get install keysync

ppa url:https://launchpad.net/~guardianproject/+archive/ppa

然后使用以下命令手动安装它们:

sudo apt get install python pyparsing python-pyasn1 python potr python pymtp\
python pyjavaproperties python beautifulsoup python qrcode libmtp dev\
python pgpdump python crypto python psutil python tkpython imaging tk

对于debian,您可以尝试使用ubuntu ppa,类似oneiric for
喘息,natty for挤压:


deb http://ppa.launchpad.net/guardianproject/ppa/ubuntu oneiric main


mac os x
--

我们网站上的二进制应用程序:
https://guardianproject.info

然后使用这些工具安装keysync(请参阅*pip+virtualenv install*
部分):


fink install pip-systempython26 virtualenv-systempython26
sudo port install py27 pip py27 virtualenv

见:https://gist.github.com/pithyless/1208841


一旦你有了pip和virtualenv,你就可以开始构建整个东西了。首先遵循下面的pip+virtualenv说明。
然后回到这里,在virtualenv中执行以下操作:

pip install py2app
python setup.py py2app
ls dist/

然后,您需要修补py2app才能使其与python2.6一起工作:

pip install--升级py2app
patch env/lib/python2.6/site-packages/py2app/build_-app.py2app-python2.6.patch


windows
----


windows,您可以从我们的网站下载二进制应用程序:
https://guardianproject.info


----


对于下面的
pip+virtual env:


sudo yum install gmp devel tk tkinter python pillow python pillow tk


----


激活虚拟python环境,然后运行pip安装依赖项:

virtualenv./env
. env/bin/activate
pip install-e.
./keysync


要获得一个好的逐步演示,请参见:
http://exyr.org/2011/virtualenv howto/slides.html

*注意*:在windows上不起作用!请参阅win32/readme.md



==
用法
=
=


>当前,代码允许在以python
字典的形式。当前激活的唯一导出方法是用于名为otr_keystore.ofcaes的文件中的chatsecure
格式。要使用,请指向"keysync"
编写要从中读取otr信息的应用程序脚本,并且它将生成
`otr_keystore`发送到您的Android设备上的ChatSecurity(运行
`keystync--help`查看所有当前可用的选项)。


keystync--input pidgin


==
==formats
=

----

adium:
~/library/application-support/adium 2.0/users/default/otr.private嫒key
~/library/application-support/adium 2.0/users/default/otr.fingerprints
~/library/application-support/adium 2.0/users/default/accounts.plist

otr.private_key和otr.fingerprints。帐户ID存储为
整数,必须从accounts.plist中引用该整数才能获取
实际xmpp帐户名(例如me@jabber.org)。对各种协议使用全词
描述性标记,例如libpurple oscar aim,
libpurple jabber,等。

pidgin
gnu/linux
~/.purple/otr.private_key
/.purple/otr.fingerprints
windows
%appdata%\.purple\otr.private_key
%appdata%\.purple\otr.fingerprints

使用标准libotr文件和总体文件格式其他指纹。在libotr文件中直接使用帐户id
。xmpp/jabber帐户ID包括"resource"
例如me@jabber.or g/resource或me@jabber.org/pidgin。

~/.irssi/otr/otr.key
~/.irssi/otr/otr.fp

基本上是libotr名称的缩写版本。
帐户ID直接用于libotr文件。

~/.xchat2/otr/otr.key
~/.xchat2/otr/otr.fp




otr4j
----

chatsecure:
/data/data/info.guardianproject.otr.app.im/files/otr_keystore


所有otr信息都存储在一个java.properties
文件中。私钥、公钥指纹和验证状态
是每个单独的属性。与libotr不同,这种格式还包括远程公钥的
存储。[otr4j]
实现从存储加载远程公钥,而不是总是从otr会话获取它。

gnu/linux
~/.jitsi/sip communicator.properties
~/.jitsi/contactlist.xml
mac os x
~/library/application支持/jitsi/sip communicator.properties
~/library/application support/jitsi/contactlist.xml
windows
~/application data/jitsi/sip communicator.properties
~/application data/jitsi/contactlist.xml

包括OTR信息。私钥、公钥指纹、
和验证状态都是各自的属性。



pure python otr
----


pure python otr是otr规范的纯python实现。它包含了一些新的功能,如社会主义百万富翁协议。
私钥存储在每个帐户的单独文件中。
指纹以与
[libotr]相同的制表符分隔值格式存储,但每个帐户有一个指纹文件。

gnu/linux:
~/.local/share/gajim/.key3
~/.local/share/gajim/.fsr
~/.config/gajim/config
窗口:
~/application data/gajim/

请参见
[potr/compatcrypto/pycrypto.py](https://github.com/afflux/pure python otr/blob/master/src/potr/compatcrypto/pycrypto.py)。



keychar
----

keychar将密钥存储在两种不同格式的json文件中:0.5b and
0.6b。它使用一个特殊的base64编码和一个url安全的字母表:
-替换+
替换/

http://code.google.com/p/keychar/wiki/dsaprivatekey
http://code.google.com/p/keychar/wiki/dsapublickey

0.6b
public:
"q":dsa subprime
"p":dsa prime
"g":dsa base
"y":dsa公钥指数
"size":模的大小(位
private:
"public key":对应dsappublickey
"x"的json表示:该私钥的机密指数
"size":dsa模的大小(位)

<0.5b
public:
"x509":websafebase64编码的x509表示
private:
"pkcs8":websafebase64编码的pkcs;8表示私钥
"public key":websafebase64编码的密钥对应的pkcsdsappublickey


---

规范以获取有关ZID的详细信息。

2048位diffie-helman值
3072位diffie-helman值
256位diffie-helman椭圆曲线
384位diffie-helman椭圆曲线曲线




实现
===


这里有一些关于如何在keysync中实现的注释。


内部密钥存储
----

然后,对于给定的
程序,可以将该公共格式传递给任何类,该类知道如何将其输出为正确的文件格式。当前的内部数据格式是dict的dict,表示一个键,称为"keydict"。
因此,首先,您有一个dict,表示一个给定的帐户,它与一个给定的键相关联。此帐户名用作唯一ID。然后
整个密钥集合(本地私钥和远程公钥)在meta dict中收集,帐户名为密钥,整个dict为值。此格式允许轻松合并,这允许在
文件之间同步。


python dict表示法中的示例结构:

'userid':{
'fingerprint':'ff66e8c909c4deb51cbd4a02b9e6af4d6af215f8',
"名称":"用户ID",
"协议":"IRC",
"资源":"笔记本电脑",xmpp"资源"
"验证":"验证",或"smp",用于社会主义百万富翁dsa密钥的一部分
'q':'<;q value>;',dsa密钥的公共部分
'g':'<;g value>;',dsa密钥的公共部分
'x':'<;x value>;',专用dsa密钥的核心
'y':'<;y value>;,,#公共dsa密钥的核心
},
'userid2':{…},

'useridn':{…}
}



协议ID
----


>不幸的是,每个应用程序都有自己的字符串ID来表示不同的IM
协议。keysync在内部使用pidgin id。keysync目前主要关注广泛部署的xmpp和irc通用标准。我们欢迎
为与其他协议合作做出贡献。这些是
当前一直工作的ID:

prpl irc irc(Internet中继聊天)
prpl jabber xmpp(jabber)

皮钦语:
https://developer.pidgin.im/wiki/prpl_id



[adium]:https://adium.im/
[chatsecure]:https://chatsecure.org/
[jitsi]:https://jitsi.org/
[libotr]:https://otr.cypherpunks.ca/
[otr4j]:https://github.com/otr4j/otr4j
[洋泾浜]:https://pidgin.im/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在java中合并XML,使多个节点的标记名与子节点相同?   在java中,selenium在接口中没有构造函数   模式涉及美元符号($)时的java正则表达式   java如何在应用程序第一次启动时运行特定代码?   java可以推断和/或构建适当的目录结构   java Else语句在处理所有文本文件之前执行   无法从请求中获取值。getParameterJavaJSP   java Log4j2抛出NoSuchMethodError   java JavaFX事件回调回父单元   java开关编译错误   java HTTP状态415–在Spring MVC上执行POST请求时不支持的媒体类型   java如何从中获取地图。txt文件使用属性?   java在ArrayList中使用引用来调用方法,并更改被引用对象的当前状态?   没有带受保护访问修饰符的访问修饰符的java重写方法   为什么使用Java引用变量和文本的“+”运算符进行连接不会导致字符串插入?   RubyonRails Java不能做声明?