Up1, 客户端加密图像主机web服务器

分享于 

11分钟阅读

GitHub

  繁體 雙語
Client-side encrypted image host web server
  • 源代码名称:Up1
  • 源代码网址:http://www.github.com/Upload/Up1
  • Up1源代码文档
  • Up1源代码下载
  • Git URL:
    git://www.github.com/Upload/Up1.git
    Git Clone代码到本地:
    git clone http://www.github.com/Upload/Up1
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Upload/Up1
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Logo

    Up1: 客户端加密映像主机

    Up1是一个简单的主机,客户端对图像。文本和它的他数据进行加密,并存储服务器。 它具有查看图像。带语法突出显示。短视频和任意二进制文件作为downloadables的。

    public-服务器

    有一个 public,可以在 https://up1.ca 服务器上免费使用服务器。
    这里演示实例不再可用或者正在维护。 但是,有几个 public 主机使用 up1. 在线搜索应该会产生一些结果。

    客户端实用程序:
    • ShareX,一个流行的屏幕截图和图像上传器,现在与Up1支持合并
    • 通用,一个上传到Up1服务器的命令行工具

    快速启动

    要使用默认设置安装和运行服务器:

    
    apt-get install nodejs
    
    
    git clone https://github.com/Upload/Up1
    
    
    cd Up1
    
    
    cp server/server.conf.example server/server.conf
    
    
    cp client/config.js.example client/config.js
    
    
    cd server
    
    
    npm install
    
    
    node server.js
    
    
    
    

    服务器配置是通过 server.conf 文件完成的。 为了快速启动,只需将 server.conf.example 移动到 server.conf

    listen 是一个 address:port -formatted字符串,其中任何一个都是可选的。 例如在任何接口。端口 9000.监听主机端口 80.监听 1.1.1.1 端口 8080,或者甚至 "" 监听任何接口,端口 80,端口。

    api_key 是一个非常基本的安全措施,要求任何客户机进行上传才能知道这个密钥。 这似乎并不十分有用,应该进行改进;用HTTP授权替换它?

    delete_key 是用于保护删除密钥的密钥。 将这里设置为只有服务器知道的内容。

    maximum_file_size 是允许上载到服务器的最大文件,以字节为单位。 这里的默认值是十进制 50 MB。

    配置 file: httphttpscloudflare-cache-invalidate 中还有另外3 个部分。 前两个是相当独立的explanitory ( 至少必须启用一个)。

    在默认情况下禁用 cloudflare-cache-invalidate,仅当你选择运行Up1服务器 behind Cloudflare时,。 当这里部分被启用时,它确保删除上传时,Cloudflare不会通过发送API调用来保持它的边缘服务器上的上传。

    对于web应用程序配置,提供了一个 config.js.example 文件。 确保这里的api_keyserver.conf 中的MATCHES。

    外部工具

    目前,有两个外部程序适用于 Up1: ShareX (。相关代码 ),和通用。

    ShareX是一个流行的屏幕截图工具,支持大量上传服务,不仅用于图像,视频,文档,等等 ShareX,还包括一个可以发送文件到任何服务器服务器的服务。 它使用. NET BouncyCastle进行加密。

    通用Up1是一个可以通过unix管道向服务器发送文件或者数据的工具 ps aux | up ),或者通过参数( up image.png ),并返回一个URL到输出的文件。 它在nodejs上运行,并使用SJCL进行加密。

    工作原理

    在上传图像之前,会生成一个"种子"。 这里种子可以是任意长度的( 因为实际上服务器永远都不能告诉我们),但默认情况下长度为 25个字符。 然后种子通过SHA512运行,以字节为单位给出AES密钥,以字节为单位,以字节为单位,以字节为单位,服务器标识符为字节2,以字节为单位。 使用这个输出,图像数据使用,和,加密,并使用sjcl方法的AES连接到服务器。 在加密中,还有一个包含元数据( 当前只是文件名和mime类型)的JSON对象。 ( 已经解密) 格式以 2字节开始,表示JSON字符长度。JSON数据本身,然后是末尾的文件数据。

    图像删除功能也可用。 上载图像时,将返回 delete 令牌。 将这里 delete 令牌发送回服务器将 delete。 在服务器端 HMAC-SHA256(static_delete_key, identifier) 如果密钥是服务器上的密钥,则使用。

    技术

    浏览器端是用SJCL编写的,用于aes连接加密,并使用 WebCrypto api和加密执行的熵获取熵。 视频和音频播放器只使用HTML5播放器,希望内置到浏览器中。 粘贴查看器使用 highlight.js 进行语法高亮显示和行号。

    另外,SJCL的存储库副本来自 https://github.com/bitwiseshiftleft/sjcl的源代码,提交 fb1ba931a46d41a7c238717492b66201b2995840 ( 版本 1.0.3 ),用 命令行 构建 ./configure --without-all --with-aes --with-sha512 --with-codecBytes --with-random --with-codecBase64 --with-ccm 使用闭包编译器进行压缩。 如果一切顺利,自建副本应该向的内容发送 byte-for-byte。

    服务器端是用 node 写的,尽管我们还有一个of服务器,它不在标准库之外。 它使用的唯一密码是用于生成删除密钥,分别使用 crypto/hmaccrypto/sha256 包中的,和,。

    警告

    • 加密/解密are流或者块。 这意味着任何下载必须完全符合内存,否则浏览器可能崩溃。 这不是sub-10MB图像的问题,但如果你想分享长时间的游戏视频或者记录会议时间,可能会有问题。 我们希望帮助和贡献,即使它们是向后兼容的。

    • 的CCM有点慢。 与其他认证加密模式相比,比如GCM或者公民公民模式,CCM被认为是较慢的模式( 比GCM慢,速度几乎是OCB的两倍),不是并行和 ,不是最佳的设计决策。 然而,我们选择这个算法的原因是双重的: ,SJCL contained audited oldest oldest oldest oldest security security security security security security security security security security security security security security security security security security security security slower slower slower。 还有其他可能更快的加密库,比如 asmcrypto.js,但是它看起来是新的,我们对它的了解并不太清楚,而且目前更喜欢它的熟悉性。 我们可以在一个受信任的方中查看一下 asmcrypto.js.。

    • 它以它的非常自然的特性在Javascript中使用。 在Javascript中使用加密的原因很多,有些原因可能比其他的更有效。 我们正在使用浏览器扩展来减轻它的中的一些原因,但是如果无条件地认为( 而非Javascript客户端总是受欢迎) 加密是错误的。 在服务器上发生信任时,客户端仍可以修改,以读取你的解密密钥。

    • 这里代码作为一个新项目收费,但还没有被信任参与方审核。 是全新的,在代码上很少有( 到日期),甚至代码上的可信眼睛更少了。 尽管我们尽可以能把硬加密内容卸载到 SJCL,但是我们仍然在( 通过 static/js/encryption.js 阅读并让我们知道如果你发现问题会非常有帮助) 上犯了一个错误。

    • 在大多数情况下,服务器将收取referrer的邮件头。 如果服务器决定记录请求,它们也将能够接收 Referer 头。 对于 private/protected 网站和通过即时邮件或者电子邮件发送的直接链接,这不是一个大。 但是,如果链接在 public 网站上,则意味着服务器所有者可能会找到原始图像。 不幸的是,软件或者服务器所有者无法对此( 除了托管 behind,一个CDN和把引用器 header 放到边缘) 执行任何操作,但是当发布一个链接时,你有几个选项:

    • rel="noreferrer" 放入指向Up1服务器的任何 <a> 链接中。
    • 如果你没有控制链接属性,你可以使用一个参考断路器,例如 https://anon.click/ 或者 https://href.li/,在许多 many。

    无论是对现有代码还是作为单独的应用程序,任何贡献都非常受欢迎 !

    我们不要求任何类- 你不必放弃代码的版权- 不过我们更喜欢在,下作为一致。

    如果你发现严重的安全问题,请在 security@up1.ca 处发送电子邮件。

    如果你想聊天,我们中的一些人在 #upload 频道的irc.freenode.net 上空闲 !

    感谢你的捐赠 !

    许可证

    Up1服务器和浏览器代码均在MIT下许可。

    sharex代码基础在GPLv2下许可,但是修改( 即 C# 加密码) 是在MIT下许可的。

    通用通用许可证在MIT下完全许可。


    WEB  Server  图像  SID  HOST  encrypt  
    相关文章