Proposals_auth.htm
31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<link rel=File-List href="./Proposals_auth_files/filelist.xml">
<title>Proposals for authenticating content in the BB player</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>pramila</o:Author>
<o:Template>Normal</o:Template>
<o:LastAuthor>pramila</o:LastAuthor>
<o:Revision>2</o:Revision>
<o:TotalTime>2054</o:TotalTime>
<o:Created>2002-05-30T23:00:00Z</o:Created>
<o:LastSaved>2002-05-30T23:00:00Z</o:LastSaved>
<o:Pages>5</o:Pages>
<o:Words>1488</o:Words>
<o:Characters>8484</o:Characters>
<o:Company>RouteFree</o:Company>
<o:Lines>70</o:Lines>
<o:Paragraphs>16</o:Paragraphs>
<o:CharactersWithSpaces>10418</o:CharactersWithSpaces>
<o:Version>9.3821</o:Version>
</o:DocumentProperties>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
h1
{mso-style-next:Normal;
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:1;
font-size:12.0pt;
font-family:"Times New Roman";
mso-font-kerning:0pt;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:124927964;
mso-list-type:hybrid;
mso-list-template-ids:992389694 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1
{mso-list-id:168448410;
mso-list-type:hybrid;
mso-list-template-ids:-1642313258 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l2
{mso-list-id:197353463;
mso-list-type:hybrid;
mso-list-template-ids:-1088905386 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l3
{mso-list-id:239097934;
mso-list-type:hybrid;
mso-list-template-ids:-882996448 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l4
{mso-list-id:500775990;
mso-list-type:hybrid;
mso-list-template-ids:1123342702 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l5
{mso-list-id:511915055;
mso-list-type:hybrid;
mso-list-template-ids:923467322 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l5:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l6
{mso-list-id:747267171;
mso-list-type:hybrid;
mso-list-template-ids:214713466 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l6:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l7
{mso-list-id:939333541;
mso-list-type:hybrid;
mso-list-template-ids:-1648340322 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l7:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:39.0pt;
mso-level-number-position:left;
margin-left:39.0pt;
text-indent:-.25in;
font-family:Symbol;}
@list l8
{mso-list-id:1260944396;
mso-list-type:hybrid;
mso-list-template-ids:1444040892 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l8:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l9
{mso-list-id:1345668352;
mso-list-type:hybrid;
mso-list-template-ids:-2066321262 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l9:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l10
{mso-list-id:1513102625;
mso-list-type:hybrid;
mso-list-template-ids:1588505130 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l10:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l11
{mso-list-id:1517959659;
mso-list-type:hybrid;
mso-list-template-ids:1972950454 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l11:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l12
{mso-list-id:1621842119;
mso-list-type:hybrid;
mso-list-template-ids:1089749658 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l12:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l13
{mso-list-id:1633291694;
mso-list-type:hybrid;
mso-list-template-ids:-629924432 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l13:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l14
{mso-list-id:1802070372;
mso-list-type:hybrid;
mso-list-template-ids:-703850912 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l14:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l15
{mso-list-id:1993869208;
mso-list-type:hybrid;
mso-list-template-ids:-288729150 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l15:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l15:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l15:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
</head>
<body lang=EN-US style='tab-interval:.5in'>
<div class=Section1>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<h1><span style='font-size:14.0pt;mso-bidi-font-size:12.0pt'>Proposals for
authenticating content in the BB player<o:p></o:p></span></h1>
<p class=MsoNormal>(Will be merged into Security document, BB player security
section)</p>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Proposals for authenticating flash content loaded into
the DDR.<o:p></o:p></b></p>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal>The following are a few proposals for the hardware/software
solution for authenticating content loaded for execution into the BB player.</p>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal>The following are the <b>resources</b> supported by the
server security infrastructure:</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l8 level1 lfo1;tab-stops:list .5in'>The
server has the ability to generate a signed hash of the content </li>
<li class=MsoNormal style='mso-list:l8 level1 lfo1;tab-stops:list .5in'>The
server has the ability to generate a content key and encrypt data with
that key </li>
<li class=MsoNormal style='mso-list:l8 level1 lfo1;tab-stops:list .5in'>The
server has the ability to create a signed license with the above hash and
content key and encrypt it with the recipients public key</li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal>The reason authenticating content becomes important is
because content revenue is tied to players being able to play our content and
no one elses. It is more important due to the fact that pirated content is
already available, so there do exist those who will benefit from being able to
sell content to BB player owners.</p>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Requirements:<o:p></o:p></b></p>
<p class=MsoNormal>The following are the security requirements for the
authentication:</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l11 level1 lfo2;tab-stops:list .5in'>The
BB player in secure mode has to authenticate the content (including code
and data or parts therof)</li>
<li class=MsoNormal style='mso-list:l11 level1 lfo2;tab-stops:list .5in'>The
code and data will be continually dmaed from the flash as the game is
played. All this content has to be authenticated during game play.</li>
<li class=MsoNormal style='mso-list:l11 level1 lfo2;tab-stops:list .5in'>It
should not be possible to pass the authenticity checks and then enter
unauthorized code into the player by launching a timing attack.</li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Additional system constraints</b>:</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l4 level1 lfo3;tab-stops:list .5in'>The
flash read, decryption and hash calculation should together satisfy the
data rate requirement of 2-5MB/s (?)</li>
<li class=MsoNormal style='mso-list:l4 level1 lfo3;tab-stops:list .5in'>Games
could span more than one flash: upto about 64MB.</li>
<li class=MsoNormal style='mso-list:l4 level1 lfo3;tab-stops:list .5in'>External
16MB/32MB flash contains the content</li>
<li class=MsoNormal style='mso-list:l4 level1 lfo3;tab-stops:list .5in'>Internal
flash is 64KB</li>
<li class=MsoNormal style='mso-list:l4 level1 lfo3;tab-stops:list .5in'>Writing
rate on external flash is about 1-2.5 sec/MB.</li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal>Each of these proposals are described in terms of steps
required in </p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l1 level1 lfo4;tab-stops:list .5in'>Content
creation</li>
<li class=MsoNormal style='mso-list:l1 level1 lfo4;tab-stops:list .5in'>Server
packaging</li>
<li class=MsoNormal style='mso-list:l1 level1 lfo4;tab-stops:list .5in'>Prior
to run time operation in chip</li>
<li class=MsoNormal style='mso-list:l1 level1 lfo4;tab-stops:list .5in'>Run
time operation and hardware requirement</li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal>The missing part is the transfer of license and content from
server to the player, which does not influence this decision.</p>
<p class=MsoNormal><b>The proposals are arranged in the order of increasing
complexity in porting the game. The first two involve a systematic modification
of the game code (possibly by a tool with some manual intervention). The third
involves looking up some characteristics of the game upfront, but no
modification. The others are agnostic of the content.<o:p></o:p></b></p>
<p class=MsoNormal>The first two proposals rely on the following principle:</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l6 level1 lfo12;tab-stops:list .5in'><b>Bootstrapping:
A piece of code is authenticated based on a signature in the license. This
code DMAs in and verifies other pieces of code. This happens recursively.
There is no security hole in this unless unauthorized code enters through
some other means (like spoofing DDR).<o:p></o:p></b></li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Proposal 1:<o:p></o:p></b></p>
<p class=MsoNormal><b>Resources used: hardware signature calculation, periodic
secure timer trap for verification<o:p></o:p></b></p>
<p class=MsoNormal><b>Content creation:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l2 level1 lfo5;tab-stops:list .5in'>Manually
identify critical parts of code that are dmaed as one unit. These dmas
use a different API call, for example, to enable code verification.</li>
</ul>
<p class=MsoNormal><b>Server operation:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l2 level1 lfo5;tab-stops:list .5in'>Verify
for minimum number of tagged data blocks, compute MD5 hashes of the
identified blocks (and the entire code?) and sign entire license <b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><b>Prior to run time:<o:p></o:p></b></p>
<p class=MsoNormal style='margin-left:.5in'>Secure kernel dmaes in the
contents of the boot code of the game and verifies the signature of the code.
(There is no need to verify entire flash contents, so reduces start up time).</p>
<p class=MsoNormal><b>Run time:</b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l2 level1 lfo5;tab-stops:list .5in'>The
game proceeds by loading an initial boot module from flash. The signature
of this module is computed, and this code is allowed to execute. For
following DMAs, if required, the MD5 hash is computed and pushed in a
stack for future use. <b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l2 level1 lfo5;tab-stops:list .5in'>When
the secure timer interrupt happens the stack of calculated hashes is
verified against the ones stored in the license. If valid, the game
proceeds.<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><b>Hardware:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>MD5
hash computation on blocks of decrypted data<b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>Some
storage space in the license for list of valid signatures. Actually (start
address, end address, hash) triples.<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Points of Discussion:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l13 level1 lfo8;tab-stops:list .5in'>Requires
space in license to store a table of values</li>
<li class=MsoNormal style='mso-list:l13 level1 lfo8;tab-stops:list .5in'>There
is no security hole in the time lag between the signature calculation and
verification because the verification interrupt is not maskable and the
signature list is not modifiable. So inauthentic code can only run until
the next timer driven secure kernel interrupt.</li>
<li class=MsoNormal style='mso-list:l13 level1 lfo8;tab-stops:list .5in'>Is there
security benefit to doing the calculation during load time and
verification at a different time? The operation is still validating code
loaded from flash, not that actually running in the CPU, for instance. The
question is whether there is better use for the ability to do run time
check? </li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Proposal 2:<o:p></o:p></b></p>
<p class=MsoNormal><b>Resources used: hardware signature calculation<o:p></o:p></b></p>
<p class=MsoNormal><b>Content creation:<o:p></o:p></b></p>
<p class=MsoNormal>(there are a few ways of achieving this goal: this is just
one illustration)</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>Use a
tool to process the entire content and process every DMA request (except
the first boot loader of the game), adding the hash of the contents it
will DMA in into the application. (The DMA request contains the hash value
of the data). This requires the game to be played so that DMA requests and
results are captured.<b> </b>Ideally we require a scheme that can be
mostly automated followed by some manual selection.</li>
</ul>
<p class=MsoNormal><b>Server: <o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>Calculates
signature of first boot loader of the game (the first DMA) and stores it
in the license</li>
</ul>
<p class=MsoNormal><b>Prior to run time:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>Loads
the first DMA from flash from secure kernel and verifies its signature
against that stored in the license.<b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l3 level1 lfo6;tab-stops:list .5in'>This
authenticated data contains the signatures of the data corresponding to
the dma calls it makes<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><b>Run time:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l5 level1 lfo9;tab-stops:list .5in'>Every
DMA call automatically loads (apart from source, destination, length) the
signature, to the hardware unit, to trigger a signature calculation. The
hardware computes the signature and verifies it atomically and if true,
proceeds.</li>
<li class=MsoNormal style='mso-list:l5 level1 lfo9;tab-stops:list .5in'>So all
DMAs are followed by signature calculation and verification.</li>
<li class=MsoNormal style='mso-list:l5 level1 lfo9;tab-stops:list .5in'>If
there is no match it sets up some register/flag which has to be cleared
before data can be loaded again from the flash. This can be interpreted by
software to stop the game or exit.</li>
</ul>
<p class=MsoNormal><b>Hardware:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l10 level1 lfo10;tab-stops:list .5in'>Engine
to compute signatures and verify with known signature</li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Points of Discussion:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l10 level1 lfo10;tab-stops:list .5in'>There
are DMAs corresponding to audio data which streams in continuously from
flash. These cannot be signature checked because the data is based on
input and there are numerous of these small requests.<b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l10 level1 lfo10;tab-stops:list .5in'>So
for this to work we need the assumption the audio data is strictly data
and cannot be hacked to issue further DMAs.<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal style='margin-left:.5in'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal style='margin-left:.5in'><b>Note: one difference between
proposal 1 and 2 is that in proposal 1 there is a time gap between the
signature calculation and verification. Hence, the secure trap is essential. In
proposal 2 the operations are atomic, hence there is no need for the secure
trap.<o:p></o:p></b></p>
<p class=MsoNormal style='margin-left:.5in'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Proposal 3:<o:p></o:p></b></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Content creation:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>Use a
tool to scan through the data to extract a list of DMA calls. Manually
extract those that require verification. No alteration to the code.<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><b>Server: <o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>Create
a table of hashes for the above list and embed in the license.<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Prior to run time:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>Verify
boot code as always</li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Run time:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='text-align:justify;mso-list:l0 level1 lfo14;
tab-stops:list .5in'>For every DMA request, do a table lookup to determine
whether the DMA has to be verified, and perform the calculation and
verification if needed. <b><span style="mso-spacerun: yes"> </span>(The
decision of whether to do the check is not embedded in the data, it is in
the table).</b></li>
</ul>
<p class=MsoNormal><b>Hardware:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>Signature
calculation </li>
</ul>
<p class=MsoNormal><b>Points for discussion:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>Can
this table be of a size such that this table lookup is possible for every
DMA request, including audio requests?</li>
<li class=MsoNormal style='mso-list:l0 level1 lfo14;tab-stops:list .5in'>If we
put in a size constraint on the DMA request to eliminate audio data, is it
possible to remove the manual process and make it seamless so that the
signature is checked for all required DMAs and we are able to capture all
the critical content?</li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Proposal 4:<o:p></o:p></b></p>
<p class=MsoNormal><b>Content creation: </b>none</p>
<p class=MsoNormal><b>Server: </b>compute MD5 hash of entire content and store,
signed, in license</p>
<p class=MsoNormal><b>Prior to run time: </b>compute MD5 hash of entire
content, verify against license. Generate a hardware dependent key and restore
data on the flash encrypted by a new key. Program new key into decryption
hardware for the remainder of game play.</p>
<h1>Run time: none</h1>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Hardware: none (except for acceleration)<o:p></o:p></b></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Points of Discussion:<o:p></o:p></b></p>
<p class=MsoNormal style='margin-left:39.0pt;text-indent:-.25in;mso-list:l7 level1 lfo13;
tab-stops:list 39.0pt'><![if !supportLists]><span style='font-family:Symbol'>·<span
style='font:7.0pt "Times New Roman"'>
</span></span><![endif]>One matter of inconvenience is that it might even take
a couple of minutes to re-write flash for a large game. </p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l12 level1 lfo11;tab-stops:list .5in'>Secondly,
if the flash is pulled out or power is shut off without gracefully exiting
the game, it will be left in unusable state and has to be downloaded from
the depot.</li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Proposal 5:<o:p></o:p></b></p>
<p class=MsoNormal><b>(Content agnostic) Starting from computed hashes for all
data in content<o:p></o:p></b></p>
<p class=MsoNormal><b>Content creation: <o:p></o:p></b></p>
<p class=MsoNormal><b>Server:<span style="mso-spacerun: yes"> </span></b>create
hash values of 1KB blocks (as an example) irrespective of data and store in a
large block along with the content. Put the hash of this hash table in the
license.</p>
<p class=MsoNormal><b>Prior to run time: </b>verify and load in this hash table
to secure part of DRAM. This is used for later verification</p>
<p class=MsoNormal><b>Run time: <o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l12 level1 lfo11;tab-stops:list .5in'>Hardware
computes hash values on every 1K byte block read in every DMA and saves
for future verification</li>
<li class=MsoNormal style='mso-list:l12 level1 lfo11;tab-stops:list .5in'>In
the next secure kernel trap these computed values are verified against
values stored in DRAM.</li>
</ul>
<p class=MsoNormal style='margin-left:.25in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Hardware: signature calculation <o:p></o:p></b></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Points for discussion:<o:p></o:p></b></p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l9 level1 lfo15;tab-stops:list .5in'>For a
64MB game the rough data size for all hashes assuming 1K blocks is about
512KB. Can we carve this much in DRAM as application inaccessible?<b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l9 level1 lfo15;tab-stops:list .5in'>Is
any randomization needed to pick a certain number of 1KB blocks? (due to
storage reasons). Then we may need to store those addresses too.<b><o:p></o:p></b></li>
<li class=MsoNormal style='mso-list:l9 level1 lfo15;tab-stops:list .5in'>In
the verification step is it possible to load and verify from DRAM all the
computed hashes or is any randomization needed?<b><o:p></o:p></b></li>
</ul>
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>MD5 details:<o:p></o:p></b></p>
<p class=MsoNormal>Since this is the major hardware support no matter which
scheme is used, it is roughly characterized here:</p>
<ul style='margin-top:0in' type=disc>
<li class=MsoNormal style='mso-list:l15 level1 lfo16;tab-stops:list .5in'>Input
512 bit blocks</li>
<li class=MsoNormal style='mso-list:l15 level1 lfo16;tab-stops:list .5in'>Divide
into 16 32 bit subblocks.</li>
<li class=MsoNormal style='mso-list:l15 level1 lfo16;tab-stops:list .5in'>Result
is 128 bit hash.</li>
<li class=MsoNormal style='mso-list:l15 level1 lfo16;tab-stops:list .5in'>Pad
and extend to make complete input a multiple of 512 bits</li>
<li class=MsoNormal style='mso-list:l15 level1 lfo16;tab-stops:list .5in'>For
each 512 bit block:</li>
<ul style='margin-top:0in' type=circle>
<li class=MsoNormal style='mso-list:l15 level2 lfo16;tab-stops:list 1.0in'>For
4 rounds</li>
<ul style='margin-top:0in' type=square>
<li class=MsoNormal style='mso-list:l15 level3 lfo16;tab-stops:list 1.5in'>For
16 values of t</li>
<li class=MsoNormal style='mso-list:l15 level3 lfo16;tab-stops:list 1.5in'>(operation
A() has approx 4 steps of logic):</li>
<li class=MsoNormal style='mso-list:l15 level3 lfo16;tab-stops:list 1.5in'>A()
+ 3 adds, 1 shift (variable number of bits) +t.</li>
</ul>
</ul>
<li class=MsoNormal style='text-align:justify;mso-list:l15 level1 lfo16;
tab-stops:list .5in'>Approx 600 logical ops per 512 bit block (excluding
data movement and some initialization, discounting the variation in the
shift).</li>
<li class=MsoNormal style='text-align:justify;mso-list:l15 level1 lfo16;
tab-stops:list .5in'>For a 1Kbyte block that is about 9600 ops. So for
about 2Mbytes per sec we need about 20 x 10^6 operations per second.</li>
<li class=MsoNormal style='text-align:justify;mso-list:l15 level1 lfo16;
tab-stops:list .5in'>Apart from this there is a decryption operation +
flash read etc
</li>
<li class=MsoNormal style='text-align:justify;mso-list:l15 level1 lfo16;
tab-stops:list .5in'>In software it is about 6 cycles per byte on a
Pentium.</li>
</ul>
<p class=MsoNormal style='margin-left:.25in;text-align:justify'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
<p class=MsoNormal><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p>
<h1><![if !supportEmptyParas]> <![endif]><o:p></o:p></h1>
</div>
</body>
</html>