IP Library › Granted Patent US 8,434,061
Granted Patent B2
US 8,434,061 · App. 12/135,032 · Granted Apr 30, 2013

System and method for array obfuscation

Inventors: Augustin J. Farrugia (Cupertino, CA); Julien Lerouge (Santa Clara, CA); Tanya Michelle Lattner (San Jose, CA); Gideon M. Myles (San Jose, CA); Gianpaolo Fasoli (Palo Alto, CA)
Assignee: Apple Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,434,061
App. No.
12/135,032
Granted
Apr 30, 2013
Kind
B2
Abstract

Disclosed herein are systems, methods, and computer readable-media for obfuscating array contents in a first array, the method comprising dividing the first array into a plurality of secondary arrays having a combined total size equal to or greater than the first array, expanding each respective array in the plurality of the secondary arrays by a respective multiple M to generate a plurality of expanded arrays, and arranging data elements within each of the plurality of expanded arrays such that a data element located at an index I in a respective secondary array is located at an index I*M, wherein M is the respective multiple M in an associated expanded array, wherein data in the first array is obfuscated in the plurality of expanded arrays. One aspect further splits one or more of the secondary arrays by dividing individual data elements in a plurality of sub-arrays. The split sub-arrays may contain more data elements than the respective secondary array. The principles herein may be applied to single dimensional or multi-dimensional arrays. The obfuscated array contents may be accessed via an index to the first array which is translated to retrieve data elements stored in the plurality of expanded arrays.

Claims (43)

1. A method of obfuscating array contents in a first array contained in a program, the method comprising:

dividing the first array into a plurality of secondary arrays having a combined total size equal to or greater than the first array;

generating a plurality of expanded arrays, each expanded array in the plurality of expanded arrays corresponding to a respective secondary array in the plurality of secondary arrays and having a size equivalent to an expansion by a respective multiple of M of the respective secondary array, wherein M is greater than 1; and

assigning data elements to each of the plurality of expanded arrays from a respective secondary array such that a data element located at an index I in the respective secondary array is located at an index I*M, wherein M is the respective multiple M in an associated expanded array.

2. The method of claim 1 , the method further comprising:

prior to expanding, splitting one or more of the secondary arrays by dividing individual data elements in a plurality of sub-arrays to generate a plurality of split secondary arrays, and

expanding each of the split secondary arrays in the plurality of split secondary arrays and any remaining secondary arrays in the plurality of secondary arrays.

3. The method of claim 2 , wherein each of the plurality of sub-arrays contains at least the number of data elements as the respective secondary array.

4. The method of claim 1 , wherein the first array is either single dimensional or multidimensional.

5. The method of claim 1 , wherein the plurality of expanded arrays is accessed via an index to the first array which is translated to retrieve data elements stored in the plurality of expanded arrays.

6. The method of claim 1 , the method further comprising storing other data in one or more unused portion of one or more expanded array.

7. The method of claim 6 , wherein other data is dummy data of a same type as data stored in the first array.

8. The method of claim 1 , the method further comprising introducing additional secondary arrays containing dummy data of a same type as data stored in the first array.

9. The method of claim 1 , the method further comprising introducing additional secondary arrays containing active data other than data in the first array, wherein the active data is data used by the program and of a same type as data stored in the first array.

10. A system for obfuscating array contents in a first array contained in a program, the system comprising:

a processor;

a first module configured to control the processor to divide the first array into a plurality of secondary arrays having a combined total size equal to or greater than the first array;

a second module configured to control the processor to generate a plurality of expanded arrays, each expanded array in the plurality of expanded arrays corresponding to a respective secondary array in the plurality of secondary arrays and having a size equivalent to an expansion by a respective multiple of M of the respective secondary array, wherein M is greater than 1; and

a third module configured to control the processor to assign data elements to each of the plurality of expanded arrays from a respective secondary array such that a data element located at an index I in the respective secondary array is located at an index I*M, wherein M is the respective multiple M in an associated expanded array.

11. The system of claim 10 , the system further comprising:

prior to expanding, splitting one or more of the secondary arrays by dividing individual data elements in a plurality of sub-arrays to generate a plurality of split secondary arrays, and

expanding each of the split secondary arrays in the plurality of split secondary arrays and any remaining secondary arrays in the plurality of secondary arrays.

12. The system of claim 11 , wherein each of the plurality of sub-arrays contains at least the number of data elements as the respective secondary array.

13. The system of claim 10 , wherein the first array is either single dimensional or multidimensional.

14. The system of claim 10 , wherein the plurality of expanded arrays is accessed via an index to the first array which is translated to retrieve data elements stored in the plurality of expanded arrays.

15. The system of claim 10 , the system further comprising a fourth module configured to control the processor to store other data in one or more unused portion of one or more expanded array.

16. The system of claim 15 , wherein other data is dummy data of a same type as data stored in the first array.

17. The system of claim 10 , the system further comprising a fourth module configured to control the processor to introduce additional secondary arrays containing dummy data of a same type as data stored in the first array.

18. The system of claim 10 , the system further comprising a fourth module configured to control the processor to introduce additional secondary arrays containing active data other than data in the first array, wherein active data is data used by the program and of a same type as data stored in the first array.

19. A non-transitory computer-readable medium storing a computer program having instructions for obfuscating array contents in a first array contained in a program, the instructions comprising:

dividing the first array into a plurality of secondary arrays having a combined total size equal to or greater than the first array;

generating a plurality of expanded arrays, each expanded array in the plurality of expanded arrays corresponding to a respective secondary array in the plurality of secondary arrays and having a size equivalent to an expansion by a respective multiple of M of the respective secondary array, wherein M is greater than 1; and

assigning data elements to each of the plurality of expanded arrays from a respective secondary array such that a data element located at an index I in the respective secondary array is located at an index I*M, wherein M is the respective multiple M in an associated expanded array.

20. The non-transitory computer-readable medium of claim 19 , the instructions further comprising:

prior to expanding, splitting one or more of the secondary arrays by dividing individual data elements in a plurality of sub-arrays to generate a plurality of split secondary arrays, and

expanding each of the split secondary arrays in the plurality of split secondary arrays and any remaining secondary arrays in the plurality of secondary arrays.

21. The non-transitory computer-readable medium of claim 19 , wherein each of the plurality of sub-arrays contains at least the number of data elements as the respective secondary array.

22. The non-transitory computer-readable medium of claim 21 , wherein the first array is either single dimensional or multi-dimensional.

23. The non-transitory computer-readable medium of claim 19 , wherein the plurality of expanded arrays is accessed via an index to the first array which is translated to retrieve data elements stored in the plurality of expanded arrays.

24. The non-transitory computer-readable medium of claim 19 , the instructions further comprising storing other data in one or more unused portion of one or more expanded array.

25. The non-transitory computer-readable medium of claim 24 , wherein other data is dummy data of a same type as data stored in the first array.

26. The non-transitory computer-readable medium of claim 19 , the instructions further comprising introducing additional secondary arrays containing dummy data of a same type as data stored in the first array.

27. The non-transitory computer-readable medium of claim 19 , the instructions further comprising introducing additional secondary arrays containing active data other than data in the first array, wherein the active data is used by the program and of a same type as data stored in the first array.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 25, 2013
From: MYLES, GIDEON M.
To: APPLE INC.
Reel/Frame 029697/0892 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 21, 2008
From: FARRUGIA, AUGUSTIN J.; LEROUGE, JULIEN; LATTNER, TANYA MICHELLE; MYLES, GINGER M.; FASOLI, GIANPAOLO
To: APPLE INC.
Reel/Frame 021263/0644 →
Continuity (1)
Related Publication 20090307657A1 · Dec 10, 2009