我被要求向 ssh 添加一个新算法,以便在新算法中对数据进行加密,知道如何向 ssh 添加新算法吗?
谢谢
可以在 SSH 通信中添加一些新算法,并且不时进行(例如,后来添加了 AES)。但问题是你需要同时修改客户端和服务器,让它们都支持这个算法,否则就没有意义了。
我假设您被要求添加一些自定义的、自制的或非标准的算法。所以我想做的第一件事就是警告你添加的算法可能很弱。你至少需要对这个算法的信息进行基本的搜索,如果它坏了,你将做完全无用甚至危险的工作。
至于软件修改本身——这是一项难得的工作,你很可能在那里找不到有这种经验的人。然而,处理各种算法的代码是典型的,添加新算法是微不足道的——你添加一个带有算法实现的源文件,然后通过在 switch 语句中添加一个 case 来修改一堆地方。
在我的职业生涯中,我参与过一个私有的 ssh 分支,它作为闭源商业软件出售。即使是他们所有的疯狂愚蠢(私人分叉?谁在他们的头脑中使用非开源加密软件?我认为我们的客户完全不喜欢他们的摇滚乐。)没有添加新的加密算法。
不过是可以做到的。将钩子添加到 ssh 协议以支持它并不难。该协议旨在以这种方式进行扩展。一开始,客户端和服务器交换他们愿意使用的加密算法列表。
当然,这意味着只有经过修改的客户端和经过修改的服务器才能相互通信。
真正的困难是 OpenSSL。ssh 不使用 TLS/SSL,但它使用 OpenSSL 加密库。您必须将新算法添加到该库中,而该库是一个可怕的野兽。
不过,我想您可以添加算法而不将其添加到 OpenSSL。不过这可能很棘手,因为我认为 openssh 可能严重依赖 OpenSSL API 的工作方式。它们的部分工作原理允许您传递一个表示您要使用的算法的常量,然后传递一组标准的加密和解密调用,这些调用使用该常量来决定算法。
不过,如果我没记错的话,OpenSSL 有一个专门用于向其套件添加新算法的 API。所以这可能不是那么难。您必须确保在初始化 OpenSSL 库时发生这种情况。
无论如何,这是一个相当模糊的答案,但也许它会为您指明正确的方向。你应该让做这件事的人付出巨额金钱。需要这种程度的知识才能实现的愚蠢永远不应该便宜。