OT Extension

Survey of
OTExtension
Yuval Ishai, Joe Kilian, Kobbi Nissim, Erez Petrank
Oblivious Transfer Extension
Slides by Peter Rindal
2/26/2014
INTRODUCTION
Background information
OT
DEFINITION
β€’ Oblivious Transfer is a ubiquitous cryptographic primitive designed to transfer
specific data based on the receivers choice.
Bob
Alice
π’ŽπŸŽ , π’ŽπŸ
𝒓 ∈ {𝟎, 𝟏}
π’Žπ’“
β€’ No other information can be learned by any party.
NOTATION
𝒗
β€’ Let
β€’ 𝑂𝑇𝑙𝑛
denote 𝑛 oblivious transfers each of length 𝑙
k
β€’ Let
β€’ Bold lower case letters denote a vectors
β€’ Capital letters denote a matrix.
i.e.
i.e.
𝒗
𝑀
𝑴𝒋
n
𝑴𝑖
β€’ Let
β€’ 𝑀𝑗
β€’ 𝑀𝑖
denote the π‘—π‘‘β„Ž row of 𝑀
denote the 𝑖 π‘‘β„Ž colum of 𝑀
𝑀
MOTIVATION
β€’ OT is used extensively in general protocols for secure computation.
β€’ At least one OT per input bit
β€’ OT is typically an efficiency bottleneck
β€’ What if we could use a few traditional oblivious transfers and get many OTs
β€’ Given π‘˜ OTs
β€’ Get ~2π‘˜ OTs
ANALOGY
β€’ Public key cryptography is expensive compared to private key
cryptography.
β€’ Can we use private key cryptography to extend public key cryptography?
β€’ YES!
β€’ Use public key cryptography to share a short private key.
β€’ Use private key cryptography as the work horse.
𝑝𝑒𝑏. π‘˜π‘’π‘¦
π‘π‘Ÿπ‘–. π‘˜π‘’π‘¦
𝑝𝑒𝑏. π‘˜π‘’π‘¦
β†’
+
BANG FOR YOUR BUCK
β€’ The algorithm will turn 𝑢𝑻𝒏𝒍 β†’ π‘Άπ‘»π’Œπ’
β€’ Turn 𝑛 iterations of 𝑙 length OTs β†’ π‘˜ iterations of 𝑛 length OTs.
β€’ where π‘˜ is the security parameter.
β€’ How is this better
β€’ π‘˜ = 128, π‘œπ‘Ÿ 256
Some security parameter…
β€’ 𝑛 = π‘›π‘’π‘šπ‘π‘’π‘Ÿ π‘œπ‘“ 𝑖𝑛𝑝𝑒𝑑𝑠
β€’ maybe 30,000?
𝑢𝑻𝒏𝒍
β€’ Instead of 30,000 OTs
β€’ We do 128 OTs each of length 30,000 (much cheaper!!)
β†’
π‘Άπ‘»π’Œπ’
?
+
EXTENDING OT
Semi-honest
THE ALGORITHM: 1
Sender
Receiver
β€’ INPUT: 𝑋 ← 𝑛 pairs of 𝑙 length
messages ( indexed by 𝑋i,{0,1} )
β€’ INPUT: r ← 𝑛 selection bits
β€’ Initializes a random vector 𝒔 ∈ {𝟎, 𝟏}π’Œ
β€’ Initializes a random 𝑛 × π‘˜ bit matrix 𝑇
𝒔
k
k
Run OT backwards to share Information for the later OTs
β†’
π‘Άπ‘»π’Œπ’
+
n
𝑇
THE ALGORITHM: 2
Run OT backwards to share Information for the later OTs
Sender
β€’ 𝑋, 𝒔
Receiver
β€’ r, 𝑇
β€’ Run π‘˜ OTs on each column of 𝑇
β€’ π‘š0 = 𝑇𝑗 ,
π‘š1 = π‘Ÿβ¨π‘‡π‘—
β€’ Use 𝒔 as the selection bits for the π‘˜
OTs
β€’ Let 𝑄 denote the result of these OTs
β†’
π‘Άπ‘»π’Œπ’
+
;1β‰€π‘—β‰€π‘˜
THE ALGORITHM: 3
Sender
Receiver
β€’ 𝑋, 𝒔, 𝑄
β€’ r, 𝑇
β€’ For each row 𝑗 of 𝑄:
β€’ For each message pair
β€’ Send 𝑦𝑗,0 , 𝑦𝑗,1
β€’ 𝑧𝑗 = 𝑦𝑗,π‘Ÿπ‘— ⨁𝐻( 𝑗, 𝑇𝑗 )
β€’ 𝑦𝑗,0 = Xj,0 ⨁𝐻( 𝑗, 𝑄𝑗 )
β€’ 𝑦𝑗,1 = Xj,1 ⨁𝐻( 𝑗, 𝑄𝑗 ⨁𝒔)
β€’ Correctness: 𝑧𝑗 ≑ 𝑋𝑗,π‘Ÿπ‘—
β†’
π‘Άπ‘»π’Œπ’
+
Wait, What?
OBTAINING 𝑄
Receiver picks 𝑇 ∈ 𝑅 {0,1}π‘›ο‚΄π‘˜
Sender picks 𝒔 ∈ 𝑅 {0,1}π‘˜
Sender obtains 𝑄 ∈ {0,1}π‘›ο‚΄π‘˜
ri=0
1 1
0 0
1 1
ri=1
1 0
0 1
1 0
t1
t2
tk
t1
οƒ…
r
s1
t2
οƒ…
r
s2
...
tk
οƒ…
r
sk
qi= ti
π‘Άπ‘»π’Œπ’
qi= ti s
t1
οƒ…
r
t2
...
tk
οƒ…
r
𝑠= 1 0 … 1
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Run OT backwards to share Information for the later OTs
Sender
β€’ 𝑋, 𝒔, 𝑄
Columns of 𝑄
Rows of 𝑄
β€’ 𝑄1 = 𝒓 β‹… π’”πŸ ⨁𝑇 1
β€’ Q1 = π‘Ÿ1 β‹… 𝒔 ⨁𝑇1
β€’ 𝑄 2 = 𝒓 β‹… 𝒔2 ⨁𝑇 2
β€’ Q 2 = π‘Ÿ2 β‹… 𝒔 ⨁𝑇2
…
β€’ 𝑄 π‘˜ = 𝒓 β‹… π’”π’Œ ⨁𝑇 π‘˜
…
β€’ Q n = π‘Ÿπ‘› β‹… 𝒔 ⨁𝑇𝑛
β†’
π‘Άπ‘»π’Œπ’
+
Receiver picks T οƒŽR {0,1}nο‚΄k
Sender picks s οƒŽR {0,1}k
Sender obtains Q οƒŽ {0,1}nο‚΄k
ri=0
1 1
0 0
1 1
qi= ti
ri=1
1 0
0 1
1 0
qi= ti s
t1
t2
tk
t1
οƒ…
οƒ…
t1
οƒ…
r
s1
t2
οƒ…
r
s2
...
tk
r
sk
r
t2
...
tk
οƒ…
r
𝑠= 1 0 … 1
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Run OT backwards to share Information for the later OTs
Sender
β€’ 𝑋, 𝒔, 𝑄
Rows of 𝑄
β€’ 𝑄1 = π‘Ÿ1 β‹… 𝒔 ⨁𝑇1
β€’ 𝑄2 = π‘Ÿ2 β‹… 𝒔 ⨁𝑇2
…
β€’ 𝑄𝑛 = π‘Ÿπ‘› β‹… 𝒔 ⨁𝑇𝑛
β€’ If the Receiver's selection bit π‘Ÿ1 = 0
β€’ 𝑄1 = 𝑇1
β€’ If the Receiver's selection bit π‘Ÿ1 = 1
β€’ 𝑄1 = 𝒔⨁𝑇1
β†’
π‘Άπ‘»π’Œπ’
+
Receiver picks T οƒŽR {0,1}nο‚΄k
Sender picks s οƒŽR {0,1}k
Sender obtains Q οƒŽ {0,1}nο‚΄k
ri=0
1 1
0 0
1 1
qi= ti
ri=1
1 0
0 1
1 0
qi= ti s
t1
t2
tk
t1
οƒ…
οƒ…
t1
οƒ…
r
s1
t2
οƒ…
r
s2
...
tk
r
sk
r
t2
...
tk
οƒ…
r
𝑠= 1 0 … 1
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗 ⨁𝒔
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Sender
β€’ 𝑋, 𝒔, 𝑄
β€’
π‘Ÿπ‘— = 0
π‘Ÿπ‘— = 1
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑄𝑗
= 𝑋𝑗,0 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗
β€’ 𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑄𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, π‘Ÿπ‘— β‹… 𝒔 ⨁𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
β‡’ 𝑋𝑗,0 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗 ⨁𝒔
β‡’ 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
CORRECTNESS
Receiver
β€’ r, 𝑇
β€’ π‘Ÿπ‘— = 1
β€’ π‘Ÿπ‘— = 0
𝑦𝑗,0
𝑦𝑗,1
= 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
= 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
𝑋𝑗,0 ≑ 𝑦𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
𝑋𝑗,1 β‰’ 𝑦𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
𝑦𝑗,0
𝑦𝑗,1
= 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗 ⨁𝒔
= 𝑋𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
𝑋𝑗,0 β‰’ 𝑦𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
𝑋𝑗,1 ≑ 𝑦𝑗,1 ⨁𝐻 𝑗, 𝑇𝑗
β†’
π‘Άπ‘»π’Œπ’
+
BANG FOR YOUR BUCK
β€’ The algorithm will turns 𝑢𝑻𝒏𝒍 β†’ π‘Άπ‘»π’Œπ’
β€’ Turn 𝑛 iterations of 𝑙 length OTs β†’ π‘˜ iterations of 𝑛 length OTs.
β€’ where π‘˜ is the security parameter.
β€’ How is this better????
β€’ π‘˜ = 128, π‘œπ‘Ÿ 256
Some security parameter…
β€’ 𝑛 = π‘›π‘’π‘šπ‘π‘’π‘Ÿ π‘œπ‘“ 𝑖𝑛𝑝𝑒𝑑𝑠
β€’ maybe 30,000?
β€’ Instead of 30,000 OTs
β€’ We do 128 OTs each of length 30,000 (much cheaper!!)
𝑢𝑻𝒏𝒍
β†’
π‘Άπ‘»π’Œπ’
𝐻
+
SECURITY
β€’ Easy to verify protocol is secure against malicious sender.
β€’ 𝑄 appears simply as uniform randomness since it’s the combination of 𝑇𝑗 and
𝒓⨁𝑇𝑗
β€’ Both 𝑇𝑗 and π‘Ÿβ¨π‘‡π‘— appear as uniform randomness.
β€’ A simulator would
β€’ Generate a random matrix 𝑄 and send that is the input to the backwards π‘‚π‘‡π‘›π‘˜ .
β€’ Sender would then output (𝑦𝑗,0 , 𝑦𝑗,1 ) as it would normally do.
β€’ The sender just cant learn the value 𝒓.
β€’ They are allowed to send any π‘š0 , π‘š1 since this can happen in the idea world.
SECURITY
β€’ Verifying the protocol is secure against Semi-honest receiver.
β€’ There are only two ways for a semi-honest receiver to learn a message it shouldn’t.
1. 𝑠 = {0}π‘˜
β€’ β„Ž 𝑗, 𝑇𝑗 ⨁𝑠 = β„Ž( 𝑗, 𝑇𝑗 )
β€’ This happens with probability
2.
1
2π‘˜
It guesses correctly on a query β„Ž( 𝑗, 𝑇𝑗 ⨁𝑠)
𝑑
β€’ If the receiver make 𝑑 queries, it has a probability of π‘˜
2
𝑑+1
β€’ Therefore, it is secure except with negligible probability π‘˜
2
CORRELATION ROBUSTNESS
Instantiating the Random Oracle
MOTIVATION
β€’ In this protocol, the receiver knows many of these 𝑇1 , 𝑇2 , … , π‘‡π‘˜ values but does
not the senders secret value 𝑠.
β€’ If the receiver could learn 𝑠 by knowing 𝑇1 , 𝑇2 , … , π‘‡π‘˜ and querying β„Ž. The
receiver could break the protocol and learn all messages.
β€’ EX: if
rj = 0
𝑦𝑗,0 = 𝑋𝑗,0 ⨁𝐻 𝑗, 𝑇𝑗
𝑦𝑗,1 = 𝑋𝑗,1 ⨁𝐻 𝑗, 𝒔⨁𝑇𝑗
DEFINITION
β€’ Correlation Robustness
β€’ A hash function that is secure against XOR-ing an unknown and many know
values together.
β€’ Given
β„Ž 𝑑1 , 𝑑2 , … 𝑑𝑛
β„Ž(𝑠⨁𝑑1 ), β„Ž(𝑠⨁𝑑2 ), … , β„Ž(𝑠⨁𝑑𝑛 )
The joint distribution looks pseudo-random.
β€’ Even if given access to polynomial additional queries to β„Ž.
PROTOCOLS
β€’ We believe this is a simple requirement enjoyed by many hash functions.
β€’ SHA1
β€’ RC5
β€’ Any Evidence that they do not have this property would be considered an
attack on these protocols.
EXTENDING OT
Malicious Adversary
MALICIOUS ATTACK
ON SEMI-HONEST PROTOCOL
β€’ Suppose the receiver somehow knows 𝑋𝑗,0 ; 1 ≀ 𝑗 ≀ 𝑛
β€’ Then, On the backwards π‘‚π‘‡π‘›π‘˜ they could
β€’ set the 𝑖 π‘‘β„Ž bit on π‘šπ‘—,0 to 0.
β€’ Everywhere else, π‘šπ‘—,0 =π‘šπ‘—,1
β€’ When the receiver gets 𝑦𝑗,0 , 𝑦𝑗,1 , they can extract 𝒔 from the collection of all of the
𝑦𝑗,0 messages.
β€’ Since the receiver knows that at the 𝑗 π‘‘β„Ž bit
else.
𝑄𝑗 = 𝒔𝒋 and known values everywhere
β€’ Therefore 𝒔 can be learned and then all of 𝑋 can be learned.
MALICIOUS ATTACK
ON SEMI-HONEST PROTOCOL
β€’ Essentially,
β€’ The receiver changes their choice of messages it wants for each π‘‚π‘‡π‘›π‘˜ . It then
compares the differences it gets in ( 𝑦𝑗,0 , 𝑦𝑗,1 ).
β€’ It then guesses at that bit either being 1 or 0.
β€’ Queries β„Ž on both guesses and checks to see which one makes sense.
SOLUTION
β€’ Cut-and-choose!!!!!
β€’ Make sure that the receiver is sending consistent choices of messages it wants to
receive.
β€’ Run 𝜎 instances of the protocol in parallel with completely random inputs.
β€’ Randomly β€œopen”
𝜎
2
of the instances.
β€’ Have the receiver share the private values.
β€’ Evaluate the remaining
𝜎
2
instances.
𝜎
β€’ The receiver tells the sender whether or not each random 𝑛 remaining inputs are right or
2
wrong.
β€’ Sender sends the βŠ• of the desired message 𝑋𝑗,𝑏 with the remaining
𝜎
2
random inputs.
πΆπ‘œπ‘›π‘π‘™π‘’π‘ π‘–π‘œπ‘›
π‘‡β„Žπ‘’ 𝐸𝑛𝑑
Thanks you,
-Peter Rindal
CITATIONS
β€’ Yuval Ishai, et. al. [IKNP 03] , Extending Oblivious Transfers Efficiently
http://www.cs.bgu.ac.il/~kobbi/papers/OTextend_proc.pdf (paper),
http://dimacs.rutgers.edu/Workshops/Privacy/slides/ishai.ppt (slides)
β€’ Vladimir Kolesnikov, et. al. [KK 13] , Improved OT Extension for Transferring
Short Secrets http://eprint.iacr.org/2013/491.pdf (paper),
http://www.youtube.com/watch?v=AgPZVecLuXs (video)