Mission possible: Oblivious Transfer
Lyubomir Filipov @FilipovG

Who am I
Lyubomir Filipov
Team Lead
Enthusiast

Building block


Keys exchange

Identification
Authentication

Oblivious transfer
cryptographic primitive
1-out-of-2 OT: Alice chooses as input two bits b0 and b1. Bob chooses a selection bit c and gets as output the bit bc.
Bananas in Pyjamas

Oblivious transfer

Alice should not learn c
Bob should not learn b1-c
Alice

Bob

Oblivious transfer

Only one item is returned to Bob.
Alice won't know what Bob has in his mind!
Oblivious transfer

Biometric data
personal data resulting from specific technical processing relating to the physical, physiological or behavioural characteristics of a natural person, which allow or confirm the unique identification of that natural person.
Biometric data

Fingerprint scanning

Iris recognition

Biometric data
Not 100% perfect
Every scan will return different results

Data representation

Hamming distance


Privacy-preserving biometric identification


- Anonymous Biometric access Control
- Biometric Anonymous Credentials
- Secure Biometric Database Intersection
Biometric identification


SHADE protocol




SHADE protocol

SHADE protocol

X | Y | X XOR Y |
---|---|---|
0 | 0 | |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |





0
0
1
1
SHADE protocol

SHADE protocol


SHADE protocol

SHADE protocol


SHADE protocol

Where it could be applied
- Dating app where you only want to receive messages from one user.
- IoT devices that send sensitive data.
But, wait

To be aware of
- All this comes as extra traffic
- It could not be extended easily
What about PHP?

php-bdt
(WIP)

Steps
- Library in C
- Use build directly
- Create PHP Extension
PHP Extension

You could use Zephir

FFI
Foreign Function Interface (PHP 7.4)
Ed25519

Relocation R_X86_64_32S against `scale19' can not be used when making a shared object; recompile with -fPIC
const gfe4x Gk =
{{
{ repeat4x(3338585.0) } ,
{ repeat4x(3934835965952.0) } ,
{ repeat4x(16993937369696567296.0) } ,
{ repeat4x(4464222746302153748381696.0) } ,
{ repeat4x(93371163235585075216663357423616.0) } ,
{ repeat4x(1163399014865459815517614333765877760.0) } ,
{ repeat4x(441936960085431936284569284157504919873519616.0) } ,
{ repeat4x(355047131404459050871642921761149483359549389799424.0) } ,
{ repeat4x(626647004757192365988092839070681114614100044180388577280.0) } ,
{ repeat4x(13159058716893486699394031679446200360393917757201178927420145664.0) } ,
{ repeat4x(12842070454865951878207543570322902610654944894655310136406629955928064.0) } ,
{ repeat4x(16295354408597167049195255459117446390458785936524946835293367493552880222208.0) }
}};

mov $Gk,%rcx
vmovupd 0(%rcx),%ymm2
vmulpd %ymm1,%ymm2,%ymm3
vmulpd 32(%rcx),%ymm1,%ymm4
...
vmulpd 160(%rcx),%ymm1,%ymm8
vmulpd 192(%rcx),%ymm1,%ymm9
...
vmulpd 224(%rcx),%ymm1,%ymm10

rdynamic

Questions?

Mission possible: Oblivious Transfer
By Lyubomir Filipov
Mission possible: Oblivious Transfer
- 1,476