Coder Social home page Coder Social logo

lyra1998 / efs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from 929220967/efs

1.0 0.0 0.0 48.61 MB

本项目基于fabric1.4+IPFS+Intel SGX,提供一种保护客户隐私的、可审计的区块链文件存储系统(简称为:EFS)。

Go 2.07% HTML 1.10% JavaScript 95.24% Shell 1.59%

efs's Introduction

EFS

本项目基于fabric1.4+IPFS+Intel SGX,进行创新设计,提供一种保护客户隐私的、可审 计的区块链文件存储系统(简称为:EFS)。

目录结构

.
├── Chaincode
│   ├── zallDisk
│   └── zallDisk.go
├── client
│   ├── Html
│   │   ├── background.jpg
│   │   ├── css
│   │   │   ├── bootstrap.css
│   │   │   ├── bootstrap.css.map
│   │   │   ├── bootstrap-grid.css
│   │   │   ├── bootstrap-grid.css.map
│   │   │   ├── bootstrap-grid.min.css
│   │   │   ├── bootstrap-grid.min.css.map
│   │   │   ├── bootstrap.min.css
│   │   │   ├── bootstrap.min.css.map
│   │   │   ├── bootstrap-reboot.css
│   │   │   ├── bootstrap-reboot.css.map
│   │   │   ├── bootstrap-reboot.min.css
│   │   │   └── bootstrap-reboot.min.css.map
│   │   ├── index.html
│   │   └── js
│   │       ├── bootstrap.bundle.js
│   │       ├── bootstrap.bundle.js.map
│   │       ├── bootstrap.bundle.min.js
│   │       ├── bootstrap.bundle.min.js.map
│   │       ├── bootstrap.js
│   │       ├── bootstrap.js.map
│   │       ├── bootstrap.min.js
│   │       └── bootstrap.min.js.map
│   ├── httpclient.js
│   ├── LocalWebServer.js
│   ├── package-lock.json
│   └── sgx_protect_file
├── README.md
├── server
│   ├── bufferSplit.js
│   ├── chaincode.js
│   ├── httpserver.js
│   ├── ipfsApi.js
│   ├── package.json
│   ├── package-lock.json
│   ├── sgx_protect_file
│   ├── upload
│   │   ├── demo.txt
│   │   └── encrypted_example.txt
│   └── wallet
│       └── admin
│           ├── 50903b380f64b25831d5d82978cabf58b6baf741102d62fef9f85d650b099c0b-priv
│           ├── 50903b380f64b25831d5d82978cabf58b6baf741102d62fef9f85d650b099c0b-pub
│           └── admin
├── startFabric.sh
└── stopFabric.sh

运行项目

服务端

1. 复制zallDiskSDK文件夹到fabric-samples目录

$ sudo cp -r zallDiskSdk/ $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/zallDiskSDK/

$ cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/zallDiskSDK/

2. 复制Chaincode的zallDisk文件夹到fabric-samples/Chaincode目录

$ sudo cp -r zallDiskSdk/Chaincode/zallDisk $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/Chaincode

3. 启动fabric网络

$ cd /GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/zallDiskSDK/

$ sudo ./startFabric.sh

4. 启动IPFS

$ ipfs daemon

5. 设置sgx环境变量

$ source /opt/intel/sgxsdk/environment

6. 启动httpserver.js

$ cd ./server

$ npm install

$ sudo node httpserver.js

  • 请求处理过程:

    • 接收加密文件,存储到./server/upload文件夹

    • 启动Enclave,解密文件,并执行审计规则。

      • 审计通过,会返回"Pass Audit"消息给客户端

      • 审计未通过,会返回“Fail Audit”消息给客户端。

    • 调用ipfsApi.js,add文件到IPFS网络,生成hash。

    • 调用chaincode.js,调用链码。

      • 如果用户存在,则上链:hash, filename, 用户名

      • 如果用户不存在,先创建用户上链:用户名,再上链:hash, filename, 用户名 *

8.SGX执行解密和审计

$ cd sgx_protected_file/

$ sudo make

$ sudo ./app decrypt -i encrypted_example.txt -u wuliangshun

客户端

1. 运行web server

$ cd client/

$ npm install

$ sudo node LocalWebServer.js

2. 进入操作界面

浏览器输入http://127.0.0.1:8080

3. 执行操作

注意:前端与后端的交互尚未完成。可手动继续4-6,完成文件加密和上传

4. 设置sgx环境变量

$ source /opt/intel/sgxsdk/environment

5.执行文件加密

$ cd client/sgx-protected-file

$ sudo make

$ sudo ./app encrypt -i example.txt -u wuliangshun

6.上传文件

$ cd ..

$ sudo node httpclient.js ../sgx-protected-file/encrypted_example.txt

附:依赖环境安装

IPFS

一.ipfs安装

1.下载go-ipfs

https://dist.ipfs.io/#go-ipfs(需要翻墙)

如果网络没翻墙去github下载 地址https://github.com/ipfs/go-ipfs/releases

2.获取安装包之后

$ sudo tar xvfz go-ipfs.tar.gz

$ cd go-ipfs

$ sudo ./install.sh

$ sudo ipfs init

会生成提示,界面有一串哈希地址,通过

$ sudo ipfs cat $(FILE_HASH)

出现界面安装成功。

二.创建秘钥

1.下载秘钥工具

$ sudo git clone https://github.com/Kubuxu/go-ipfs-swarm-key-gen.git

(也可以通过go get 安装,但是go get经常失败)

$ sudo go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-gen

2.编译

$ sudo go build -o ipfs-swarm-key-gen go-ipfs-swarm-key-gen/ipfs-swarm-key-gen/main.go

3. 生成秘钥

$ sudo ./ipfs-swarm-key-gen > swarm.key

源码就是随机生成一个32位的随机数,然后用 hex.Encode 成一个 64 位 16进制数

4.复制秘钥

将生成的秘钥复制到多主机的.ipfs(ipfs的)本地目录。

三.配置共享网络,假设两台主机

1.删除ipfs默认的网关节点

$ ipfs bootstrap rm all

2.修改第一台主机的./ipfs的ip地址

"Addresses": {

  "Swarm": [
  
    "/ip4/0.0.0.0/tcp/4001",   //0.0.0.0需要修改为当前主机的ip,通用192.168.1.11
    
    "/ip6/::/tcp/4001"
    
  ],
  
  "Announce": [],
  
  "NoAnnounce": [],
  
  "API": "/ip4/127.0.0.1/tcp/5001",        //127.0.0.1需要修改为当前主机的ip,通用192.168.1.11
  
  "Gateway": "/ip4/127.0.0.1/tcp/8080" //127.0.0.1需要修改为当前主机的ip,通用192.168.1.11
  
},

3.查看第一台主机ipfs节点的ID值。

$ ipfs id

4.启动第一台ipfs的网络

$ ipfs daemon

5.添加第一台节点的地址到另一台节点的bootstrap列表中。

$ ipfs bootstrap add /ip4/被添加节点的ip地址/tcp/4001/ipfs/被添加节点的ID值

6.可以查看ipfs网络已经加入的节点。

$ ipfs swarm peers

四.测试

1.第一台机器执行该命令会返回文件哈希,保存下来

$ ipfs add $(FILE_PATH)

2.第二台机器 在当前目录生成该文件,可以查看文件内容

$ ipfs get $(FILE_HASH)

$ ipfs cat $(FILE_HASH)

五. (有一个配套的ipfs界面)

安装运行WebUI:

$ git clone https://github.com/ipfs/webui

$ cd webui

$ npm install

Runs server on port 3000.

$ npm start

六. 访问WebUI:

http://localhost:3000

fabric1.4 (centos)

一. 安装golang:

1.官网下载golang包

2.解压到 /usr/local

$ tar -C /usr/local -zxf go1.12.7.linux-amd64.tar.gz

3.编辑环境变量

$ vim /etc/profile

末端插入:


export PATH=$PATH:/usr/local/go/bin    //goroot可执行文件路径

export GOROOT=/usr/local/go       //goroot路径,安装路径

export GOPATH=$HOME/go           //go项目启动路径

export PATH=$PATH:$HOME/go/bin  //gopath可执行文件路径

$ source /etc/profile

$ go version

二.docker安装

1.安装必要的工具

$ yum install -y yum-utils device-mapper-persistent-data lvm2

2.通过工具增加docker源

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装

$ yum install docker-ce

4.启动

$ systemctl start docker

$ systemctl enable docker

5.是否成功

$ docker version

6.把用户加入docker组,非root用户下运行docker,不需要执行sudo

$ sudo groupadd docker

$ sudo usermod -aG docker $USER

7.重启docker服务

$ sudo service docker restart

三.配置docker-compose

1.输入命令行

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

(没安装curl,输入命令行yum install -y curl安装)

2.切换到安装包的界面

$ cd /usr/local/bin/

会有一个docker-compose的文件,可以输入ls查看。

3.给该文件增加权限

$ sudo chmod +x docker-compose

4. 查看是否有输出对应版本。

$ docker-compose version

四.下载Fabric源码

1.创建文件夹

$ mkdir -p go/src/github.com/hyperledger/

2.进入

$ cd go/src/github.com/hyperledger/

3.clone

$ git clone "https://github.com/hyperledger/fabric.git"

4.cd

$ cd fabric/

5. 切换版本

$ git checkout release-1.4

6.cd scripts/

这一步会下载官方的例子以及所需要的Docker镜像,下载是比较慢的,如果出现错误或者长时间没有速度只需要重新运行就可以了

$ sudo ./bootstrap.sh

此处说明,跟网络关系很大,二进制文件如果下载失败,去github上下载对应版本,源网址网站我今年尝试已经关闭了。如果上一步操作下载二进制文件太慢或者没速度,可以直接对源码进行编译,执行以下命令(前提是以上相关路径配置没有错误):如果失败,去github上下载对应二进制文件放到此文件夹下,要不然网络无法启动,因为缺少configtxgen configtxlator cryptogen 这些工具. 如果文件夹内有如下文件的话说明编译成功:configtxgen configtxlator cryptogen discover idemixgen orderer peer

$ cd ~/go/src/github.com/hyperledger/fabric/

$ make release

$ cd release/linux-amd64/bin

环境变量生效

$ vim ~/.profile

文件中最后添加以下内容

$ export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin

更新一下

$ source ~/.profile

进入first-network文件夹

$ cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/

执行命令

$ ./byfn.sh up

--大概率失败,如果是干净容器第一次部署的机器成功很大,fabric受镜像版本影响很大,如果出错查看弹窗说明,百度搜索或者stackoverflow去搜索。

最后执行以下命令关闭网络

$ ./byfn.sh down

如果要开始其他网络必须执行此步,要不然环境不干净。

SGX (Ubuntu 16.04)

1. 下载SDK源码

$ git clone https://github.com/occlum/linux-sgx.git

2. 安装依赖 (SDK)

$ sudo apt-get install build-essential ocaml automake autoconf libtool wget python libssl-dev

3. 安装依赖 (PSW)

$ sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake

4. 下载二进制文件

$ ./download_prebuilt.sh

5. 编译SDK

$ make sdk

6. 编译PSW(需开启硬件支持,SIM模式不需要)

$ make psw

7. 测试是否成功

  $ cd SampleCode/LocalAttestation
  $ make SGX_MODE=SIM
  $ ./app

安装nodejs库

切换到服务器目录

$ cd server

安装依赖

$ npm install node-gyp

$ npm install node-pre-gyp

$ npm install grpc

安装express框架

$ npm install express -save

安装ipfs-api

$ npm install ipfs-api

安装fabric-nodejs-sdk

$ sudo npm install --registry=https://registry.npm.taobao.org --unsafe-perm=true --allow-root

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.