Why Do I Need an MSP?
Giả sử có một peer sử dụng private key để ký lên transaction sau khi thực hiện endorse. MSP sẽ có nhiệm vụ kiểm tra xem peer đó có quyền chứng thực transaction hay không. Sau đó, nó sẽ dùng public key từ chứng chỉ (digital certificate) của peer để xác thực chữ ký số trên transaction. Có thể nói, MSP là một cơ chế giúp các danh tính ở trong network trở nên tin cậy và được nhận diện bởi toàn bộ network.
Có thể xem CA như là credit card provider - nó có nhiệm vụ cấp phát các thẻ tín dụng có thể xác thực. Trong khi đó, một MSP sẽ xác định xem credit card nào được phép sử dụng tại cửa hàng. Nói cách khác, MSP sẽ chuyển danh tính (credit card) thành một vai trò (có khả năng mua đồ tại cửa hàng).
Đây là một cơ chế quan trọng của Hyperledger Fabric bởi vì nó cho phép các tổ chức, node và channel khả năng kiểm soát truy cập ở trong blockchain network.
Một thành viên muốn tham gia vào blockchain network thì ngoài danh tính thì cần phải được cấp quyền. Cụ thể, để giao dịch trong network của Fabric thì thành viên đó cần:
- Sở hữu một danh tính được cấp phát bởi CA mà được tin tưởng bởi tổ chức. MSP của tổ chức sẽ quyết định xem CA nào là tin cậy đối với tổ chức.
- Kiểm tra xem MSP của tổ chức có được thêm vào channel hay chưa. Nếu rồi thì có nghĩa là tổ chức đã được nhận diện và chấp thuận bởi các thành viên khác của network.
- Đảm bảo rằng MSP của tổ chức được liệt kê ở trong các chính sách của network.
What is an MSP?
MSP bao gồm một tập các thư mục được thêm vào cấu hình của network. Các thư mục này được dùng để xác định admin của tổ chức và cho phép các tổ chức khác kiểm tra các thực thể trong tổ chức có đủ quyền để thực hiện những hành động mà chúng đang làm hay không.
MSP sẽ nhận diện các root CA và intermediate CA được phép cấp phát danh tính cho các thành viên tham gia network. Quan trọng nhất, nó sẽ chịu trách nhiệm gán vai trò có các quyền cụ thể cho một danh tính bất kỳ. Ngoài ra, MSP còn cho phép nhận diện các danh tính đã bị thu hồi1.
MSP Domains
Các MSP có thể được cấu hình ở hai phạm vi:
- Trên một actor node (local MSP)
- Trên channel (channel MSP)
Hai loại này khác nhau ở phạm vi áp dụng.
Local MSP
Local MSP được cài đặt trên từng node (cả peer và orderer) và client2:
- Đối với các node thì local MSP đóng vai trò định nghĩa các quyền hạn ở trên node đó (chẳng hạn như node admin nào có quyền vận hành node).
- Đối với các client thì local MSP cho phép các user tự xác thực chính họ trong các giao dịch như là một thành viên của channel hoặc như là một vai trò đặc biệt nào đó chẳng hạn như organization admin.
Tất cả các node đều cần phải có local MSP. Hơn thế nữa, mỗi tổ chức nên có một MSP riêng.
Channel MSP
Trong khi đó, channel MSP giúp định nghĩa các quyền hạn ở mức độ channel. Các peer và orderer ở trong channel đều thống nhất về một tập các MSP giống nhau.
Channel MSP sẽ bao gồm các MSP của các tổ chức. Khi một tổ chức muốn tham gia vào network, MSP của tổ chức đó cần phải được thêm vào channel configuration. Nếu không, tất cả các transaction xuất phát từ tổ chức đó đều bị từ chối.
Khác với local MSP được cài đặt ở trên file system của từng node, channel MSP được cài đặt ở trong một channel configuration3.
Minh họa về local MSP và channel MSP:
Trong hình trên:
ORG1
là một tổ chức sở hữu ordererO
và join vào channelC
.ORG1
có một local MSP choO
và một global MSP dùng để thể hiện choORG1
ở trên channel.ORG2
là một tổ chức sở hữu peerP
và join vào channelC
.ORG2
có một local MSP cho peer và một global MSP dùng để thể hiện choORG2
ở trên channel.- Ngoài ra, global MSP của
ORG1
còn được sử dụng để thể hiện choORG1
ở trên blockchain network . - Các MSP của từng tổ chức đều được quản lý bởi CA của tổ chức đó.
Organizational Units (OUs)
Một tổ chức có thể được chia thành nhiều organization unit (OU). Mỗi unit có thể xem như là một phòng ban trong tổ chức. Khi một X.509 Certificate được phát hành, trường OU ở trong chứng chỉ sẽ được dùng để phân biệt giữa các OU trong cùng một tổ chức.
Nếu OU không được định nghĩa, tất cả các danh tính thuộc MSP (được định danh bởi Root CA và Intermediate CA) sẽ đều được xem là thành viên của tổ chức.
Node OU Roles
Có một OU đặc biệt được gọi là Node OU, được dùng để cấp phát một vai trò cho một danh tính. Các vai trò của Node OU được định nghĩa ở trong $FABRIC_CFG_PATH/msp/config.yaml
và bao gồm một danh sách các OU được ánh xạ với vai trò đó.
Ví dụ:
Trong cấu hình trên, có 4 vai trò là client, peer, admin và orderer. Cụ thể hơn, với các chứng chỉ được phát hành bởi cacerts/ca.sampleorg-cert.pem
mà có OU là client thì sẽ có vai trò là client, có OU là peer sẽ có vai trò là peer, …
Các vai trò ở trên sẽ được gán cho một danh tính khi Fabric CA hoặc SDK register
một người dùng. Theo sau đó sẽ là câu lệnh enroll
giúp sinh ra các chứng chỉ ở trong thư mục /msp
của các user.
Thông tin về vai trò của người dùng sẽ được liệt kê ở trong một X.509 Certificate nằm ở trong thư mục /msp/signcerts
:
MSP Structure
Một local MSP sẽ bao gồm các thư mục con như sau:
cacerts
: bao gồm các chứng chỉ tự ký của các Root CA được tin tưởng bởi tổ chức. Là thư mục quan trọng nhất.intermediatecerts
: bao gồm các chứng chỉ của các Intermediate CA được tin tưởng bởi tổ chức.admincerts
: gồm các chứng chỉ của các admin của tổ chức. Không còn sử dụng với phiên bản Fabric 1.4.3 trở lên.keystore
: chứa private key của các node dùng để ký các giao dịch. Channel MSP không chứa thư mục này.signcert
: chứa chứng chỉ của node được phát hành bởi các CA. Dùng để định danh các node. Channel MSP không chứa thư mục này.tlscacerts
: chứa các chứng chỉ tự ký của các Root CA dùng trong việc giao tiếp an toàn giữa các node thông qua giao thức TLS.tlsintermediatecacerts
: chứa các chứng chỉ của các Intermediate CA dùng cho giao thức TLS.operationscerts
: chứa các chứng chỉ dùng để giao tiếp với Fabric Operations Service API.
Một channel MSP còn có thêm thư mục chứa các chứng chỉ bị thu hồi được liệt kê ở trong CRL của CA.
Related
Resources
- https://hyperledger-fabric.readthedocs.io/en/latest/identity/identity.html
- https://hyperledger-fabric.readthedocs.io/en/latest/membership/membership.html
Footnotes
-
có thể là một ứng dụng hoặc một hệ thống bên ngoài tương tác với blockchain nhưng không lưu ledger và tham gia vào quá trình đồng thuận như các peer. ↩
-
xem thêm Creating the Network ↩