Contextual Zero-Knowledge Authentication with IPFS-Backed Hyperledger Fabric for Privacy-Preserving Blood Supply Chain Management
Abstract
1. Introduction
2. Background and Related Work
2.1. Blood Supply Chain and Medical Data Sharing
2.2. Blockchain and Hyperledger Fabric in Healthcare
2.3. IPFS and Off-Chain Storage
2.4. Zero-Knowledge Proofs and Privacy-Preserving Authentication
2.5. Existing Blockchain-Based Healthcare Systems and the Gaps
3. System Requirements, Threat Model, and Methodology
3.1. System Requirements and Design Goals
- Donor registration and pseudonymous identification: The system must support registering donors with a pseudonymous identifier (donorRegID) that can be used across the blockchain network without exposing real-world identities. It should be possible to link multiple blood donations and related medical data to the same donorRegID while keeping personally identifiable information (PII) off-chain or in restricted private data collections.
- Consent management and policy enforcement: Donors must be able to define and update consent preferences specifying which organizations (e.g., hospitals, blood banks) may access which types of data (e.g., lab results, donation history) for which purposes (e.g., treatment, research). The system must enforce these consent policies at access time, and every access decision must be logged.
- Secure medical data storage and sharing: Sensitive donor-related medical data (test results, transfusion records, etc.) must be stored in encrypted form off-chain (e.g., in IPFS), with only content identifiers and minimal metadata stored on-chain. Authorized parties should be able to retrieve and decrypt the data when permitted by donor consent.
- Blood-unit lifecycle tracking: The system must represent and track the lifecycle of individual blood units, including collection, testing outcomes, labeling, shipment, receipt at hospitals, and final outcome (transfused/discarded). Such tracking should be tamper-evident and easy to query for audit and hemovigilance purposes.
- Donor transparency and auditability: Donors should be able to query their own consent preferences, see what categories of data are stored, and inspect logs of recent access events and the status of blood units derived from their donations.
- Privacy and unlinkability: The system should minimize on-chain disclosure of PII and support contextual pseudonyms so that donor activities in different organizational or purpose contexts cannot be trivially linked. Zero-knowledge proofs should be used to decouple authentication from identity revelation.
- Integrity, traceability, and accountability: All critical events—such as consent updates, access decisions, and blood-unit state transitions—must be recorded on an immutable ledger, enabling end-to-end traceability and post hoc auditing.
- Scalability and performance: The framework should be compatible with realistic throughput and latency requirements of blood services. Off-loading large data to IPFS and restricting the on-chain state to metadata and logs are key to achieving scalability.
- Regulatory alignment and fine-grained control: The design must support governance structures that reflect real healthcare consortia and provide fine-grained control over which organizations can see which data, aligning with privacy regulations and blood safety requirements.
- Modularity and deployability: Core components—Hyperledger Fabric network, IPFS storage, ZKP gateway, and identity authority—should be loosely coupled so that they can be deployed, scaled, or upgraded independently.
3.2. Threat Model and Assumptions
3.2.1. Adversaries and Capabilities
- External network attacker: An adversary can eavesdrop on, intercept, and replay network traffic between user applications, the gateway, the blockchain network, and IPFS nodes. They may attempt to impersonate donors or authorized institutions, or to replay old authentication transcripts and access requests.
- Curious or malicious insiders: Users or administrators at participating organizations (e.g., hospitals, blood banks, labs) may have legitimate access to parts of the system but may attempt to access donor data beyond their authorization, correlate donor activities across contexts, or tamper with local logs. Multiple insiders across organizations may collude and share data.
- Compromised client devices: Donor devices (e.g., smartphones) may be compromised by malware, leading to theft of cryptographic material or unauthorized use of legitimate credentials. We assume that device compromise is possible but aim to reduce the impact on on-chain privacy (e.g., prevent long-term identity linkage even if keys leak).
- Curious storage and infrastructure operators: IPFS node operators, cloud providers, and some blockchain peers may be honest-but-curious: they follow the protocol but attempt to infer donor identities or medical details from stored data and metadata.
3.2.2. Assumptions
- Cryptographic hardness: The underlying group operation (e.g., discrete logarithm in an elliptic curve group) is secure, and hash functions behave as random oracles for the zero-knowledge proofs and pseudonym derivation.
- Correctness of identity, authority, and MSP: The Identity Authority truthfully binds real-world donor identities to public keys and donorRegIDs, and the Fabric Membership Service Provider correctly manages organization identities. These components may be curious but are not assumed to be arbitrarily malicious (e.g., they do not forge donor identities at scale).
- Honest majority in consensus: As is standard in permissioned Fabric deployments, we assume that a sufficient fraction of ordering and endorsing organizations are honest, so that the ledger’s immutability and consensus guarantee hold.
- Secure channels between gateway and Fabric/IPFS: Communications between the ZKP gateway and the Fabric peers, as well as between the gateway and IPFS, use authenticated and encrypted channels (e.g., TLS), preventing trivial man-in-the-middle attacks at the transport layer.
- No sensors or real-time actuation dependencies: While the framework supports recording temperature and lifecycle events, we do not assume active sensor–actuator control loops; thus, real-time control attacks are out of scope.
3.3. Methodology
4. Proposed Framework and Architecture
4.1. High-Level Architecture
4.2. Entities, Roles, and Data Model
- Donor: An individual who donates blood and whose medical and personal data must be protected. Donors interact through a mobile or web application to register, manage consent, and approve data access.
- Blood bank/collection center: Organizations responsible for recruiting donors, collecting blood, and performing initial processing steps. They register donations and blood units on the blockchain and may access donor data for operational purposes.
- Laboratory: Entities that perform infectious disease screening and other tests. They generate test results, upload encrypted reports to IPFS, and register corresponding data pointers and testing outcomes on-chain.
- Hospital/clinic: Institutions that request access to donor-related medical data (e.g., test results, donation history) in order to support transfusion decisions and hemovigilance activities. They also receive, store, and transfuse blood units, updating the on-chain blood-unit state.
- Logistics provider: Organizations that transport blood units between sites, optionally contributing temperature and location data for cold-chain monitoring.
- Regulator/oversight body: Authorities that monitor compliance, perform audits, and analyze aggregated data. They primarily use read-only queries over the ledger and logs.
- Identity Authority (IA): A trusted or semi-trusted service that binds real-world donor identities to cryptographic keys and pseudonymous identifiers, and manages the issuance of long-term public keys used in the ZKP protocol.
- ZKP gateway: An off-chain component that performs donor authentication using zero-knowledge proofs, derives context-bound pseudonyms, and mediates access requests to the blockchain and IPFS.
- Donor identifier (donorRegID): A pseudonymous identifier used to represent donors on-chain. It serves as the key for consent records and references to donor data, but is not directly linkable to real-world identity without IA cooperation or access to private collections.
- Contextual pseudonym (Pctx): A cryptographic pseudonym derived from the donor’s long-term secret and a specific context (combining donorRegID, requesting organization, purpose, etc.). It is used during authentication and may be logged to support accountability while limiting cross-context linkability.
- Consent record: A structured object mapping data types and purposes to allowed organizations or roles, versioned and timestamped. It is stored on-chain in a consent state database keyed by donorRegID.
- IPFS content identifiers (CIDs): Content-addressed identifiers referencing encrypted medical data stored in IPFS. For each donor and data type, a data pointer record binds donorRegID, dataType, and ipfsCID.
- Blood unit record: A stateful object representing an individual blood unit, keyed by a unique unitID and containing fields such as donorRegID, blood type, collection site, current location, testing result, assignment to hospital and patient, status (collected, tested, labeled, in transit, at hospital, transfused, discarded), and optional temperature profile identifiers.
- Access log entry: A record capturing an access decision, including donorRegID, requestorID, dataType, purpose, decision (allow/deny), AuthProofID, pseudonymCtx, and timestamp. These logs form the basis for audit and compliance analysis.
- Temperature reading (optional): A record containing a profileID, timestamp, location, and temperature value; profileIDs link sequences of readings to one or more blood units.
4.3. System Data Flows
5. ZKP-Based Authentication and Privacy Mechanism
5.1. Cryptographic Setting and Notation
- Group and generator: Let G be a cyclic group of prime order q with generator g. We assume that the discrete logarithm problem (DLP) in G is hard: given g and h = ga for a chosen uniformly at random in Z_q, no probabilistic polynomial-time algorithm can compute a with non-negligible probability. In implementations, G may be taken as a prime-order subgroup of an elliptic curve (e.g., BLS12-381 or secp256k1).
- Hash functions: Hctx: {0,1}* → G is a hash-to-group function. We assume it is collision-resistant and that its outputs are distributed negligibly close to uniform in G for random inputs (random-oracle style). Hchal: {0,1}* → Zq is used for Fiat–Shamir challenge derivation and is modeled as a random oracle.
| Symbol | Meaning |
|---|---|
| a ← S (random) | a chosen uniformly at random from set S |
| ‖ | String concatenation |
| Y | Donor long-term public key, Y = gx |
| x | Donor long-term secret key, x ∈ Zq |
| donorRegID | Donor’s pseudonymous on-chain identifier |
| ctx | Context string (see Section 5.2) |
| hctx | Hctx(ctx) |
| Pctx | Contextual pseudonym hctx^x |
| nv | Verifier nonce, chosen at random from {0, 1}λ |
| meta | Optional metadata (purpose, consent id, etc.) |
| AuthProofID | One-time authentication token sent to chaincode |
- Identity Authority (IA): The IA generates (x, Y) per donor, assigns donorRegID, and stores (RealID, donorRegID, Y). The donor receives x (and optionally a certificate for Y) via a secure channel. The IA does not participate in the ZKP; it only provides Y to the gateway when needed for verification.
5.2. Context-Bound Pseudonyms and Identity Model
5.3. ZKP Protocol and Algorithm
| Algorithm 1: ZKPAuthenticateAndIssueToken (Verifier/Gateway Side) |
| Input: Context ctx, metadata meta; prover inputs (P_tx, t1, t2, z, n) Output: Authentication proof identifier AuthProofID and transaction reference P_tx on success; ⊥ otherwise Steps: 1: Compute h_ctx ← H_ctx(ctx) 2: Compute challenge c ← H_chal(g ∥ Y ∥ h_ctx ∥ P_tx ∥ t1 ∥ t2 ∥ n ∥ meta) 3: If (g^z ≠ t1 · Y^c) OR (h_ctx ≠ t2 · P_tx^c) then 4: return ⊥ 5: end if 6: Compute AuthProofID ← H_bind(“auth” ∥ P_tx ∥ ctx ∥ n ∥ meta ∥ gateway) 7: Return (AuthProofID, P_tx) |
5.4. Security Properties
6. Blockchain Smart Contracts and Algorithms
6.1. Consent and Data Pointer Management
| Algorithm 2: DonorConsentManager |
| Input: Operation op ∈ {REGISTER, UPDATE, GET}, donorRegID, consentData Output: Success, error, or consent record 1: stateKey ← “CONSENT_” + donorRegID 2: if op = REGISTER then 3: if StateExists(stateKey) then 4: return error “Consent already exists” 5: end if 6: consent ← Initialize consent record using consentData 7: consent.version ← 1 8: consent.timestamp ← CurrentUTCTime() 9: Store consent in ledger 10: return success 11: else if op = UPDATE then 12: if NOT StateExists(stateKey) then 13: return error “Consent not found.” 14: end if 15: oldConsent ← Retrieve consent from ledger 16: newConsent ← Update oldConsent using consentData 17: newConsent.version ← oldConsent.version + 1 18: newConsent.timestamp ← CurrentUTCTime() 19: Store updated consent 20: Trigger consent update event 21: return success 22: else if op = GET then 23: if NOT StateExists(stateKey) then 24: return error “Consent not found” 25: end if 26: return Retrieve consent from ledger |
| Algorithm 3: DataPointerManager |
| Input: Operation op ∈ {REGISTER, GET_ONE, LIST_ALL}, donorRegID, dataType, ipfsCID Output: Data pointer, list of pointers, success, or error 1: if op = REGISTER then 2: key ← “DATA_” + donorRegID + “_” + dataType 3: if StateExists(key) then 4: return error “Pointer already exists” 5: end if 6: ptr ← Create data pointer record (donorRegID, dataType, ipfsCID) 7: Store ptr in ledger 8: return success 9: else if op = GET_ONE then 10: key ← “DATA_” + donorRegID + “_” + dataType 11: if NOT StateExists(key) then 12: return error “Pointer not found” 13: end if 14: return Retrieve pointer from ledger 15: else if op = LIST_ALL then 16: prefix ← “DATA_” + donorRegID 17: ptrList ← RetrieveAllPointersMatchingPrefix(prefix) 18: return ptrList |
6.2. Authentication Token Tracking and Access Control
| Algorithm 4: AuthAndAccessController |
| Input: requestorID, donorRegID, dataType, purpose, authProofID, pseudonymCtx Output: ipfsCID or empty string “” 1: authKey ← “AUTH_” ∥ authProofID 2: if GetState(authKey) ≠ null then 3: return LogAndReturn(DENY, “”) 4: record ← {used ← true, timestamp ← CurrentUTCTime()} 5: PutState(authKey, Serialize(record)) 6: consent ← DonorConsentManager(GET, donorRegID, ∅) 7: if IsAllowed(consent.preferences, requestorID, dataType, purpose) = false then 8: return LogAndReturn(DENY, “”) 9: ptr ← DataPointerManager(GET_ONE, donorRegID, dataType, ∅) 10: if ptr = null then 11: return LogAndReturn(DENY, “”) 12: return LogAndReturn(ALLOW, ptr.ipfsCID) Subroutine 1. IsAllowed Input: prefs, requestorID, dataType, purpose Output: true or false 1: if prefs.AllowedData[dataType] ≠ true then 2: return false 3: if prefs.AllowedPurposes[purpose] = undefined then 4: return false 5: return (requestorID ∈ prefs.AllowedPurposes[purpose]) Subroutine 2. LogAndReturn Input: decision, ipfsCID Output: ipfsCID or “” 1: log ← {donorRegID, requestorID, dataType, purpose, decision, authProofID, pseudonymCtx, timestamp ← CurrentUTCTime()} 2: key ← “ACCESS_” ∥ donorRegID ∥ “_” ∥ CurrentUTCTimeNano() ∥ “_” ∥ requestorID ∥ “_” ∥ dataType 3: PutState(key, Serialize(log)) 4: if decision = ALLOW then 5: return ipfsCID 6: else 7: return “ ” |
6.3. Donor Transparency APIs
| Algorithm 5: DonorQueryAPI |
| Input: op ∈ {SUMMARY, ACCESS_LOGS}, donorRegID, maxResults (for ACCESS_LOGS) Output: summary record (for SUMMARY) or list of access logs (for ACCESS_LOGS) 1: if op = SUMMARY then 2: consent ← DonorConsentManager(GET, donorRegID, ∅) 3: dataList ← DataPointerManager(LIST_ALL, donorRegID, ∅, ∅) 4: iter ← GetStateByPrefix(“ACCESS_” ∥ donorRegID ∥ “_”) 5: count ← 0 6: for each kv in iter do 7: count ← count + 1 8: endfor 9: return {donorRegID, consent, registeredData ← [ptr.dataType for ptr in dataList], accessLogCount ← count, summaryGeneratedAt ← CurrentUTCTime()} 10: registeredData ← [ptr.dataType for each ptr in dataList] 11: summary ← ⟨ donorRegID, consent, registeredData, accessLogCount = count, summaryGeneratedAt = CurrentUTCTime() ⟩ 12: return summary 13: else if op = ACCESS_LOGS then 14: if maxResults ≤ 0 then 15: maxResults ← 50 16: end if 17: iter ← GetStateByPrefix(“ACCESS_” + donorRegID + “_”) 18: logs ← [ ] 19: while iter.HasNext() and |logs| < maxResults do 20: kv ← iter.Next() 21: logs.Append(Parse(kv.value)) 22: end while 23: return logs |
6.4. Blood-Unit Lifecycle and Temperature/Cold-Chain Monitoring
| Algorithm 6: BloodUnitManager |
| Input: op ∈ {REGISTER, TEST, LABEL, ASSIGN, SHIP, RECEIVE, FINALIZE, GET}, params Output: unit or success/error 1: if op = REGISTER then 2: (unitID, donorRegID, bloodType, collectionSiteID, tempProfileID) ← params 3: key ← “UNIT_” ∥ unitID 4: if GetState(key) ≠ null then 5: return error “unit exists” 6: now ← CurrentUTCTime() 7: unit ← {unitID, donorRegID, bloodType, collectionSiteID, currentLocationID ← collectionSiteID, status ← COLLECTED, createdAt ← now, updatedAt ← now, testingResult ← PENDING, testingMetadataCID ← “”, temperatureProfileID ← tempProfileID, assignedHospitalID ← “”, assignedPatientID ← “”, outcomeNote ← “”} 8: PutState(key, Serialize(unit)) 9: return success 10: if op = GET then 11: (unitID) ← params 12: bytes ← GetState(“UNIT_” ∥ unitID) 13: if bytes = null then 14: return error “not found” 15: return Parse(bytes) 16: unit ← BloodUnitManager(GET, (params.unitID)) 17: if op = TEST then 18: (unitID, testingResult, testCID) ← params 19: unit.testingResult ← testingResult 20: unit.testingMetadataCID ← testCID 21: unit.status ← TESTED 22: if op = LABEL then 23: (unitID, labelLocationID) ← params 24: unit.status ← LABELED 25: unit.currentLocationID ← labelLocationID 26: if op = ASSIGN then 27: (unitID, hospitalID, patientID) ← params 28: unit.status ← ASSIGNED 29: unit.assignedHospitalID ← hospitalID 30: unit.assignedPatientID ← patientID 31: if op = SHIP then 32: (unitID, logisticsLocationID) ← params 33: unit.status ← IN_TRANSIT 34: unit.currentLocationID ← logisticsLocationID 35: if op = RECEIVE then 36: (unitID, hospitalID) ← params 37: unit.status ← AT_HOSPITAL 38: unit.currentLocationID ← hospitalID 39: if unit.assignedHospitalID = “” then 40: unit.assignedHospitalID ← hospitalID 41: if op = FINALIZE then 42: (unitID, outcome, outcomeNote) ← params 43: if UPPER(outcome) = TRANSFUSED then 44: unit.status ← TRANSFUSED 45: else if UPPER(outcome) = DISCARDED then 46: unit.status ← DISCARDED 47: else 48: return error “invalid outcome” 49: unit.outcomeNote ← outcomeNote 50: unit.updatedAt ← CurrentUTCTime() 51: PutState(“UNIT_” ∥ unit.unitID, Serialize(unit)) 52: return success |
| Algorithm 7: BloodUnitQueryAPI |
| Input: op ∈ {BY_DONOR, BY_STATUS}, filter (donorRegID or status), maxResults Output: list of BloodUnit 1: if maxResults ≤ 0 then 2: maxResults ← 100 3: iter ← GetStateByRange(“UNIT_”, “UNIT_~”) 4: list ← ∅ 5: while iter.HasNext() and |list| < maxResults do 6: kv ← iter.Next() 7: u ← Parse(kv.value) 8: if op = BY_DONOR and u.donorRegID = filter then 9: list.Append(u) 10: if op = BY_STATUS and u.status = UPPER(filter) then 11: list.Append(u) 12: return list |
| Algorithm 8: TemperatureManager |
| Input: op ∈ {APPEND, GET}, profileID, location, valueC (for APPEND), maxResults (for GET) Output: success/error or list of TemperatureReading 1: if op = APPEND then 2: reading ← {profileID, timestamp ← CurrentUTCTime(), location, valueC} 3: key ← “TEMP_” ∥ profileID ∥ “_” ∥ reading.timestamp 4: PutState(key, Serialize(reading)) 5: return success 6: if op = GET then 7: if maxResults ≤ 0 then 8: maxResults ← 200 9: prefix ← “TEMP_” ∥ profileID ∥ “_” 10: iter ← GetStateByPrefix(prefix) 11: list ← ∅ 12: while iter.HasNext() and |list| < maxResults do 13: kv ← iter.Next() 14: list.Append(ParseJSON(kv.value)) 15: return list |
| Algorithm 9: ZKPAuthenticateAndIssueToken (Gateway/Verifier) |
| Input: ctx, meta, Y; from prover: P_ctx, t1, t2, s, n_v Output: AuthProofID, P_ctx) or ⊥ 1: h_ctx ← H_ctx(ctx) 2: c ← H_chal(g ∥ Y ∥ h_ctx ∥ P_ctx ∥ t1 ∥ t2 ∥ n_v ∥ meta) 3: if g^s ≠ t1 · Y^c or h_ctx^s ≠ t2 · P_ctx^c then 4: return ⊥ 5: AuthProofID ← H_chal(“auth” ∥ P_ctx ∥ ctx ∥ n_v ∥ meta ∥ t_gateway) 6: return (AuthProofID, P_ctx) |
7. Security and Privacy Analysis
7.1. Privacy Preservation and Pseudonymity
7.2. Resistance to Replay, Man-in-the-Middle, and Ledger-Level Attacks
7.3. Protection Against Identity Linkage and Traffic Analysis
7.4. Insider and Collusion Attacks; Role of Private Data Collections and IA
7.5. Comparison with Existing Blockchain-Based Healthcare Systems
8. Performance Evaluation Framework and Methodology
8.1. Evaluation Metrics
8.1.1. Transaction Latency
8.1.2. Throughput
- Number of concurrent clients (e.g., donors, hospitals);
- Complexity of chaincode logic;
- Endorsement policy configuration.
8.1.3. Chaincode Execution Time
- Consent verification complexity;
- Access policy evaluation;
- Logging operations.
8.1.4. IPFS Retrieval Performance
8.2. Evaluation Methodology
8.2.1. Proposed Testbed Configuration
- A Hyperledger Fabric network with configurable organizations (2–10).
- Each organization hosts multiple peers and certificate authorities.
- An IPFS cluster for distributed storage of encrypted medical records.
- Off-chain ZKP gateway for authentication
8.2.2. Workload Scenarios
- W1: Donor Registration Burst—Large numbers of donors registering simultaneously, simulating mass blood donation campaigns.
- W2: Routine Access—Hospitals and laboratories accessing donor records and test results for scheduled transfusion procedures.
- W3: Emergency Mode—High-concurrency data access during mass-casualty or disaster situations where rapid authentication and data retrieval are required.
8.2.3. Measurements and Monitoring
- End-to-end latency: Time from the application API request to the final commit event on the ledger.
- Endorsement latency: Time required for peers to execute chaincode and generate endorsement responses.
- Ordering latency: Time taken by the ordering service to sequence transactions into blocks.
- Commit latency: Time required for peers to validate and commit transactions to the ledger.
- Content Identifier (CID) lookup time: Time required to locate and retrieve encrypted medical records using their content identifiers.
- Cache hit ratio: The proportion of retrieval requests served from local or nearby caches, which directly impacts data access latency.
8.3. Observed Performance Trade-Offs
- Security vs. latency: ZKP verification introduces computational overhead but significantly enhances privacy and authentication security.
- Decentralization vs. throughput: Increasing the number of peers improves fault tolerance but may increase consensus latency.
- On-chain vs. off-chain storage: Storing only content identifiers on the blockchain reduces ledger size but introduces dependency on IPFS retrieval time.
8.4. Limitations and Potential Optimizations
8.4.1. Limitations
- (i)
- The presented evaluation is based on a prototype implementation conducted in a controlled environment. While the results provide indicative assessment of system feasibility and performance characteristics, large-scale deployment under production-grade infrastructure remains part of future work.
- (ii)
- ZKP verification cost depends on the chosen curve and implementation; a full comparison of curves and libraries is outside the current scope.
- (iii)
- IPFS performance is highly dependent on topology, replication, and caching; results will vary by environment
- (iv)
- The threat model does not comprehensively address real-time sensor–actuator control or denial-of-service resilience.
8.4.2. Potential Optimizations
9. Conclusions and Future Work
Author Contributions
Funding
Data Availability Statement
Conflicts of Interest
References
- Mani, V.; Manickam, P.; Alotaibi, Y.; Alghamdi, S.; Khalaf, O.I. Hyperledger Healthchain: Patient-Centric IPFS-Based Storage of Health Records. Electronics 2021, 10, 3003. [Google Scholar] [CrossRef]
- Tawfik, A.M.; Al-Ahwal, A.; Eldien, A.S.T.; Zayed, H.H. ACHealthChain blockchain framework for access control and privacy preservation in healthcare. Sci. Rep. 2025, 15, 16696. [Google Scholar] [CrossRef] [PubMed]
- Guo, H.; Li, W.; Nejad, M.; Shen, C.-C. A Hybrid Blockchain-Edge Architecture for Electronic Health Records Management with Attribute-based Cryptographic Mechanisms. arXiv 2023, arXiv:2305.19797. [Google Scholar] [CrossRef]
- Katoon, P.M.; Turukmane, A.V. Interoperable blockchain network for healthcare data using Fabric, Ethereum and IPFS. Discov. Artif. Intell. 2025, 5, 308. [Google Scholar] [CrossRef]
- Javed, T.; Alharbi, F.; Margaria, T.; Crespi, N.; Qureshi, K.N. PETchain: A Blockchain-Based Privacy Enhancing Technology. IEEE Access 2021, 9, 41129–41143. [Google Scholar] [CrossRef]
- Mandinyenya, G.; Malele, V. A Hybrid Framework for Enhancing Privacy in Blockchain-Based Personal Data Sharing using Off-Chain Storage and Zero-Knowledge Proofs. J. Inf. Syst. Inform. 2025, 7, 1977–2005. [Google Scholar] [CrossRef]
- Li, J.; Wang, Z.; Guan, S.; Cao, Y. ProChain: A privacy-preserving blockchain-based supply chain traceability system model. Comput. Ind. Eng. 2024, 187, 109831. [Google Scholar] [CrossRef]
- Zhao, Y.; Cui, B.; Xu, J. A Privacy-Preserving Medical Data Traceability System Based on Attribute-Based Encryption on Blockchain. In Communications in Computer and Information Science; Springer: Berlin/Heidelberg, Germany, 2022. [Google Scholar] [CrossRef]
- Chen, C.-L.; Yang, J.; Tsaur, W.-J.; Weng, W.; Wu, C.-M.; Wei, X. Enterprise Data Sharing with Privacy-Preserved Based on Hyperledger Fabric Blockchain in IIOT’s Application. Sensors 2022, 22, 1146. [Google Scholar] [CrossRef]
- Sahu, N.; Gajera, M.; Chaudhary, A. zkFi: Privacy-Preserving and Regulation Compliant Transactions using Zero Knowledge Proofs. arXiv 2023, arXiv:2307.00521. [Google Scholar] [CrossRef]
- Devi, M.B.; Singh, N.C.; Singh, T.B. Zero-Knowledge Proof-Based Privacy-Preserving Smart Contracts for Healthcare. Indian Sci. J. Res. Eng. Manag. 2025, 9. [Google Scholar] [CrossRef]
- Trong, P.N.; Vo, H.K.; Huong, L.H.; Gia, K.H.; Dang, K.T.; Van, H.L.; Huu, N.H.; Huyen, T.N.; Nguyen, T.A.; Phu, L.V.C.; et al. Blood and Product-Chain: Blood and Its Products Supply Chain Management Based on Blockchain Approach. Int. J. Adv. Comput. Sci. Appl. 2022, 13, 743–750. [Google Scholar] [CrossRef]
- Uddin, M. Blockchain Medledger: Hyperledger fabric enabled drug traceability system for counterfeit drugs in pharmaceutical industry. Int. J. Pharm. 2021, 597, 120235. [Google Scholar] [CrossRef] [PubMed]
- Malik, S.; Dedeoglu, V.; Kanhere, S.; Jurdak, R. PrivChain: Provenance and Privacy Preservation in Blockchain enabled Supply Chains. arXiv 2021, arXiv:2104.13964. [Google Scholar] [CrossRef]
- Bai, T.; Hu, Y.; He, J.; Fan, H.; An, Z. Health-zkIDM: A Healthcare Identity System Based on Fabric Blockchain and Zero-Knowledge Proof. Sensors 2022, 22, 7716. [Google Scholar] [CrossRef] [PubMed]
- Joshi, P.B.; Natesan, A. Implementing zero-knowledge proof authentication on Hyperledger fabric to enhance patient privacy and access control. Indones. J. Electr. Eng. Comput. Sci. 2024, 37, 498–506. [Google Scholar] [CrossRef]
- Zocca, G.; Hasan, O. Privacy-Preserving and Trustworthy Localization in an IoT Environment. arXiv 2024, arxiv:2406.16182. [Google Scholar] [CrossRef]
- Azaria, A.; Ekblaw, A.; Vieira, T.; Lippman, A. MedRec: Using Blockchain for Medical Data Access and Permission Management. In Proceedings of the 2016 2nd International Conference on Open and Big Data (OBD), Vienna, Austria, 22–24 August 2016; IEEE: Piscataway, NJ, USA, 2016; pp. 25–30. [Google Scholar] [CrossRef]
- Zhang, P.; White, J.; Schmidt, D.C.; Lenz, G.; Rosenbloom, S.T. FHIRChain: Applying Blockchain to Securely and Scalably Share Clinical Data. Comput. Struct. Biotechnol. J. 2018, 16, 267–278. [Google Scholar] [CrossRef]
- Rizzardi, A.; Sicari, S.; Cevallos, M.J.F.; Coen-Porisini, A. IoT-driven blockchain to manage the healthcare supply chain and protect medical records. Future Gener. Comput. Syst. 2024, 161, 415–431. [Google Scholar] [CrossRef]
- Vaghela, A.; Suthar, A. Development of Privacy-Preservation of Big Data with Support of Hyperledger Fabric and IPFS. Int. J. Adv. Trends Comput. Sci. Eng. 2021, 10, 2930–2935. [Google Scholar] [CrossRef]
- Liu, F.; Wang, P. A Novel Privacy Protection Method of Residents’ Travel Trajectories Based on Federated Blockchain and InterPlanetary File Systems in Smart Cities. PeerJ Comput. Sci. 2023, 9, e1495. [Google Scholar] [CrossRef]
- Albalwy, F.; Brass, A.; Davies, A. A Blockchain-Based Dynamic Consent Architecture to Support Clinical Genomic Data Sharing (ConsentChain): Proof-of-Concept Study. JMIR Med. Inform. 2021, 9, e27816. [Google Scholar] [CrossRef]
- Liu, Y.; Du, Y.; Zhang, Y.; Cyril, L.; Miao, C.; Tan, Q.; Tian, Z. A Blockchain-Based Personal Health Record System for Emergency Situation. Secur. Commun. Netw. 2022, 2022, 4941214. [Google Scholar] [CrossRef]
- Guo, J.; Zhao, K.; Liang, Z.; Min, K. Efficient and Secure EMR Storage and Sharing Scheme Based on Hyperledger Fabric and IPFS. Appl. Sci. 2024, 14, 5005. [Google Scholar] [CrossRef]









| References | Application | Privacy Mechanism | Consent Model | Off-Chain Storage | Privacy Approach | ZKP Support | Blood Supply Focus | Blockchain Platform |
|---|---|---|---|---|---|---|---|---|
| [1] | Patient- centric healthcare data sharing | Encryption + hash verification | Patient consent via smart contracts | IPFS | Encrypted medical records stored off-chain with blockchain storing only hashes | No | No | Hyperledger Fabric |
| [2] | Healthcare access control system | Attribute-Based Access Control (ABAC) | Policy-based access control | Local hospital storage | Attribute-based authorization policies enforced through blockchain transactions | No | No | Hyperledger Fabric |
| [3] | EHR Sharing | (MA-ABE), Paillier Homomorphic Encryption | Organizational access policies | Distributed/cloud storage | Secure provenance tracking using cryptographic signatures and immutable ledger | No | No | Hyperledger Fabric |
| [8] | Blood donation and distribution tracking | Basic cryptographic authentication | Organizational permission model | Not clearly defined | Permissioned access with blockchain logging of blood unit transactions | No | Yes | Hyperledger Fabric |
| [12] | Medical supply monitoring with IoT sensors | Encryption + IoT device authentication | Organizational access policies | Cloud storage | Secure sensor data transmission with encrypted IoT data recorded on blockchain | No | Partial | Hyperledger Fabric |
| [21] | Secure healthcare data sharing | Encryption + hash verification | Smart contract-based access control | IPFS | Encrypted medical records stored in IPFS with blockchain maintaining secure references | No | No | Hyperledger Fabric/Ethereum |
| [22] | Electronic Health Record sharing | Public-key cryptography | Patient- controlled access permissions | External hospital databases | Access control through smart contracts and cryptographic key management | No | No | Ethereum |
| Proposed Framework | Privacy-preserving blood supply chain management | Contextual Zero-Knowledge Proof authentication + encryption | Fine-grained donor consent management | IPFS | ZKP-based authentication, encrypted off-chain storage, pseudonymous identifiers, and consent-controlled data access | Yes | Yes | Hyperledger Fabric |
| Requests | Latency (ms) |
|---|---|
| 10 | 8.4 |
| 50 | 10.2 |
| 100 | 12.0 |
| 200 | 14.5 |
| Component | Approx Contribution |
|---|---|
| Endorsement | ~40% |
| Ordering | ~30% |
| Commit | ~30% |
| Concurrent Clients | Throughput (TPS) |
|---|---|
| 10 | 42 |
| 50 | 118 |
| 100 | 96 |
| 200 | 70 |
| File Size | Retrieval Time (ms) |
|---|---|
| 1 MB | 20 |
| 5 MB | 45 |
| 10 MB | 80 |
| 20 MB | 140 |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2026 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license.
Share and Cite
Kamal, L.; Retna Raj R, J. Contextual Zero-Knowledge Authentication with IPFS-Backed Hyperledger Fabric for Privacy-Preserving Blood Supply Chain Management. Appl. Sci. 2026, 16, 4182. https://doi.org/10.3390/app16094182
Kamal L, Retna Raj R J. Contextual Zero-Knowledge Authentication with IPFS-Backed Hyperledger Fabric for Privacy-Preserving Blood Supply Chain Management. Applied Sciences. 2026; 16(9):4182. https://doi.org/10.3390/app16094182
Chicago/Turabian StyleKamal, Leda, and Jeberson Retna Raj R. 2026. "Contextual Zero-Knowledge Authentication with IPFS-Backed Hyperledger Fabric for Privacy-Preserving Blood Supply Chain Management" Applied Sciences 16, no. 9: 4182. https://doi.org/10.3390/app16094182
APA StyleKamal, L., & Retna Raj R, J. (2026). Contextual Zero-Knowledge Authentication with IPFS-Backed Hyperledger Fabric for Privacy-Preserving Blood Supply Chain Management. Applied Sciences, 16(9), 4182. https://doi.org/10.3390/app16094182

