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?

Made with Slides.com