更多秘密电报

每个人都习惯于将电报视为发送任何类型消息的可靠且安全的媒介。 但是,在幕后,他将a-和对称加密完全普通地结合在一起,这一点都不有趣。 最后,为什么还要明确信任您的消息给第三方?
安东尼奥·普罗亚斯(CAPH)
TL; DR-通过用户互相阻塞来发明一个私有的隐藏通道。


隐藏频道


有许多解决方案可在两个用户之间传输数据,避免显式联系。 您可以通过现有协议使用中介,加密和隐写术,广播中继网络和其他附件。 但是有时仅使用官方声明的功能进行联系会很有用。 也就是说,组织一个秘密通道


对于说俄语的读者来说,隐藏频道的一个简单易懂的示例是出现在十七个春天的出现窗口中的花朵。 就其本身而言,它可以站在窗户上也可以不站在窗户上-这样的共生是完全正常的,仅说明公寓业主对鲜花的热爱。 只有预定的解释才能将侦察员发送的信息与随机路人获得的信息区分开。


窗花


花窗频道电报


根据这样的示例来组织您的隐藏频道,从概念上讲仅需要两件事:一扇窗户和一朵花。 窗口描述了可用于更改和确定状态的对象,而花则描述了可能的值及其更改方法。


一个爱丽丝可以更改电报以查看特定鲍勃的电报是什么? 是的,有很多东西:化身,用户名,上次访问时间等等。 但是,通常通常每个人都可以使用它们,这限制了可能的对话的隐私性-任何知道传输方法的人都可以收听发送的消息。 奇怪的是,无需使用加密技术就可以规避此限制。


列入黑名单


每个用户都有自己独特的黑名单,如果读者至少浏览过一次,则他应该已经注意到,罪犯的最后一次访问日期已更改为“很久以前见过”,同时还有一个空的化身。 实际上,用户可能至少在一秒钟之前在线并且在其个人资料中更改了一百个印章,但是Telegram API根本不会将此数据返回给应用程序。 因此,它可以保护您的个人生活免受有害人员的侵害,反过来使他们了解自己已被阻止。


那么,窗口中的花朵与阻止列表中的常见结果是什么? 根据您是否在黑名单中,已经接收到一点信息后,就可以在某个时间检查这两者和另一信息。 另外一个好处是,电报极有可能不会在其日志中存储(如果确实如此,则不会仅出于记录目的而存储很长时间)阻止对方用户的历史记录。


整理节奏


传输和接收位的能力固然很好,但是仍然需要描述一种成熟的机制来进行操作。 当用户将其添加到黑名单时,电报不会发送用户通知,因此每个位的接收必须由接收方(Bob)启动,并且不依赖于发送方(Alice)。 还可以得出结论,爱丽丝和鲍勃必须以相同的频率执行请求,以便发送方的每个时钟周期都对应于接收方的一个时钟周期。


每个度量上的交换算法本身如下所示:


  • A检查要发送的位,如果有必要发送信号,则根据其值:
    • A-> T:块B;
    • A-> T:解锁B。
  • B有点:
    • B-> T:用户A请求;
    • T-> B:有关A的可用信息;
    • B:检查接收到的信息是否具有以下状态:
      • B:如果存在->它未被阻止并收到0
      • B:如果不是->它被阻止并收到1

大多数现代用户处理器具有良好的内置频率发生器(至少是系统时钟),因此可以在不使用数据通道本身的情况下将时钟与它们同步。 值得注意的是,对电报API的请求是网络请求,并不急于快速工作,这无助于其在俄罗斯联邦的封锁和使用代理的需求。 但是周期长度平均应该超过完成这些请求所需的时间,因此数据传输的频率和速度非常小。


我们对消息进行编码


自然语言的文本具有相当高的冗余度,因此收到的带有错误的消息仍将是人类经常可以理解的。 而且由于电报仍然是使者,尽管尝试将各种图形音频视频小工具附加到其上,但可以忽略纠错,从而将传输的数据限制为文本消息。


由于隐蔽通道的吞吐量低,您需要对可能的消息使用最有效的编码。 幸运的是,使者的名字使我们想起了这类问题司空见惯的时代。


因此,在21世纪,我们将使用一种世纪前电报工作者可用的最有效方法之一-Bodo代码对文本进行编码 。 更准确地说,他的最新版ITA-2是由Murray撰写的,以减少对常见字符的API调用。 您可以抱怨缺少俄语,但是在我看来,音译比给任何Yu和Sch牺牲附加字符简单的方法。


仅需确定每个数据传输会话的开始和结束,以便大型流中的接收方可以突出显示发送给它的消息。 在转移开始之前,Bob已被列入黑名单或不在外界。 然后,爱丽丝发出信号,开始传输,将这种状态改变一拍,反之。 在程序结束时,她只是解锁了Bob。 它继续接收空字符,直到它已累积到足以可靠地说明传输结束为止。


在时间表上


这种方法的缺点是实际上无法连接(更确切地说,您可以连接,但是您必须手动纠错)连接到正在进行的广播,并将错误接收的零字符与实际传输的零字符分开。 但是,这已经是一个实现问题。


高科技


在尝试使用官方库与API进行交互几个小时之后,我吐口水并使用更加人性化的Telethon编写了我在python中所需的所有内容。 作者甚至以同步方式展示了该API,由于某种原因,它已经变得非常罕见。 我不得不自己动手用ITA-2编写消息编码,因为我还没有真正准备好任何东西。


频率同步发生在系统时钟上(是的,程序会以一定的时间间隔进入睡眠状态),如果您考虑完成API请求的必要时间(十分之一秒以上),则这非常准确。 用户可以根据需要设置传输速度,但是,我使用“每秒没有更多请求”的原理来避免错误和冻结具有相同请求类型的垃圾邮件。 通常,Telegram对于使用其API非常挑剔,即使连续三次授权(此外,成功)也可以通过它冻结一天的访问权限,并且出于未知原因随机随机锁定。


如果用户通过隐藏渠道交换电报,则他们实际上并不需要图形界面。 是的,并非在任何地方,因此,他编写了通常的控制台实用程序。 它允许您一次运行以指定的用户ID等待和接收消息,或者通过从命令行参数读取来发送消息。 当然,没有人会禁止同时使用多个通道,也不会并行接收和发送消息,您只需要并行运行多个实例即可。


使用范例


若要使用,您需要根据此说明从电报中获取api_id和api_hash并将接收到的值设置在文件“ covertele.py”中。 命令行参数指示所需的操作,其标识符,收件人标识符以及要发送的消息(如果它是发送者)。 一切看起来像这样:


 :  : Enter your phone number: XXX | Enter your phone number: XXX Enter auth code: YYY | Enter auth code: YYY Started message transmission... | Listening for the message... ---++ ('O', '9') | ---++ ('O', '9') --+-+ ('H', '#') | --+-+ ('H', '#') +++++ (1, 1) | +++++ (1, 1) --++- ('N', ',') | --++- ('N', ',') --+-- (' ', ' ') | --+-- (' ', ' ') ++-++ (0, 0) | ++-++ (0, 0) --+-+ ('H', '#') | --+-+ ('H', '#') -++-- ('I', '8') | -++-- ('I', '8') --+-- (' ', ' ') | --+-- (' ', ' ') --+++ ('M', '.') | --+++ ('M', '.') ++--- ('A', '-') | ++--- ('A', '-') -+-+- ('R', "'") | -+-+- ('R', "'") ++++- ('K', '(') | ++++- ('K', '(') +++++ (1, 1) | +++++ (1, 1) +-++- ('F', '!') | +-++- ('F', '!') --+++ ('M', '.') | --+++ ('M', '.') --+++ ('M', '.') | --+++ ('M', '.') Done, exiting... | ----- ('', '') | ----- ('', '') | Automatically decoded: OH, HI MARK!.. 

文本会自动解码,但是通过手工查找错误,随时随地阅读并跟踪进度的粉丝可以使用发送和接收的代码的输出来完成所有这些操作。


如果有人愿意,您还可以使用提供的简单API:


 from covertele import TelegramBlockingAPI from cochannel import CovertChannel friend = input("     :") #           #  ,     -,      id = input("  :") api = TelegramBlockingAPI(id) #        friend = input("Enter your friend's id:") channel = CovertChannel(api, friend) #    channel.receive()  channel.send()     channel.send("Bork, bork!") print(channel.receive) #       ,       _raw codes = channel.receive_raw() for code in codes: check(code) channel.send_raw([19, 24, 24, 13]) 

超越电报


很明显,可以在任何使者之上组织这种渠道,在其中,有一种方法可以确定其他用户是否阻止自己。 同时,可以轻松实现相似的接口,并以相似的方式将其替换为代码。 因此,如果有需要-您可以使用完成的内容,而无需从头开始编写编码等。 幸运的是,速度较慢的python不太可能干扰按位传输。


PS特别感谢我对将我送往紧急状态的热爱。


Source: https://habr.com/ru/post/zh-CN451954/


All Articles