Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тестирование разработанной системы

Поиск

С точки зрения производительности, генерация ключей является наиболее трудоёмкой операцией в системе, особенно с учётом необходимости частого их обновления (периодически либо в определённых ситуациях, таких как добавление/удаление пользователей, файлов или групп пользователей).

На следующем рисунке представлены графики зависимости времени генерации всех ключей от количества файлов в каждой группе при разном количестве групп (кривые в одном графике) и пользователей (разные графики) при условии, что каждый пользователь состоит во всех группах:

 

 

Рисунок 4.1 График времени генерации ключей при 250 пользователях

 

 

Рисунок 4.2 График времени генерации ключей при 500 пользователях

 

 

 

Рисунок 4.3 График времени генерации ключей при 1000 пользователях

 

Ниже представлен график роста коэффициентов, построенный на основе трёх предыдущих графиков.

Каждая кривая графика отражает зависимость значений угловых коэффициентов (при определённом числе пользователей) от числа групп пользователей, т. е. одна кривая соответствует одному из трёх предыдущих грвфиков.

 

Рисунок 4.4 График роста коэффициентов для разного числа пользователей системы

 

Таким образом, можно увидеть, что время генерации ключей с увеличением количества файлов возрастает линейно, что позволяет легко использовать данную систему при достаточно больших количествах пользователей и групп, а также хранимых файлов, т. е. данная система удовлетворяет критерию масштабируемости.

 

Выводы

На данном этапе были получены следующие основные результаты:

- протестирован прототип системы на предмет производительности;

- продемонстрированы основные этапы работы клиентского приложения;

- приведены результаты тестирования в виде графиков.

 

 

ЗАКЛЮЧЕНИЕ

Рассмотренная в представленной работе проблема обеспечения безопасности в корпоративной инфраструктуре SMART является довольно актуальной.

В результате выполнения данной работы были получены следующие основные результаты:

- рассмотрены основные термины и определения, используемые в рамках данной работы;

- исследованы проблемы обеспечения безопасности в корпоративных облачных инфраструктурах;

- рассмотрены эллиптические кривые и их применение в криптографии;

- рассмотрено понятие структуры доступа;

- рассмотрен классический алгоритм шифрования на основе атрибутов;

- изучен алгоритм атрибутного шифрования на основе шифртекста (CP-ABE);

- построена модифицированная версия алгоритма CP-ABE

- на основе полученной модификации алгоритма CP-ABE построена архитектура системы шифрования и контроля доступа, определены основные компоненты и связи между ними;

- выбраны программные средства для реализации прототипа системы на основе построенной архитектуры;

- описана структурная схема прототипа, реализованы основные классы бизнес-логики для серверной и клиентской части системы;

- протестирован прототип системы на предмет производительности;

- продемонстрированы основные этапы работы клиентского приложения;

- приведены результаты тестирования в виде графиков.

Таким образом, все поставленные в работе теоретические и практические задачи были выполнены.

 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Шифрование на основе атрибутов (Attribute based encryption) / teh-box [Электронный ресурс] (http://teh-box.ru/informationsecurity/attribute-based-encryption.html)

2. Понятие корпоративного облачного хранилища данных (http://www.prj-exp.ru/dwh/what_is_dwh.php)

3. Amit Sahai and Brent Waters, Fuzzy Identity-Based Encryption Cryptology ePrint Archive, Report 2004/086 (2004)

4. Julio C.S. dos Anjos, Marcos D. Assunção, Jean Bez, "SMART: An Application Framework for Real Time

5. Big Data Analysis on Heterogeneous Cloud Environments", 2015

6. Cheng-Chi Lee, Pei-Shan Chung, and Min-Shiang Hwang, A Survey on Attribute-based Encryption Schemes of Access Control in Cloud Environments, International Journal of Network Security, Vol.15, No.4, PP.231-240, July 2013

7. J. Bethencourt, A. Sahai, and B. Waters, "Ciphertext-policy attribute-based encryption", in Proceedings of IEEE Symposium on Security and Privacy, pp. 321V334, 2007

8. R. Ostrovsky, A. Sahai, and B. Waters, "Attribute-based encryption with non-monotonic access structures", in Proceedings of the 14th ACM conference on Computer and communications security, pp. 195-203, 2007.

9. Протоколы обеспечения безопасности доступа к базам данных / cryptowiki [Электронный ресурс]

10. Эллиптическая криптография: теория (https://habrahabr.ru/post/188958/)

 

ПРИЛОЖЕНИЯ

Приложение 1. Основные классы бизнес-логики системы контроля доступа

Слой ядра

 

Серверная часть:

 

import domain.*;

import it.unisa.dia.gas.jpbc.Element;

import it.unisa.dia.gas.jpbc.Field;

import it.unisa.dia.gas.jpbc.Pairing;

import it.unisa.dia.gas.jpbc.PairingParameters;

import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;

import it.unisa.dia.gas.plaf.jpbc.pairing.a.TypeACurveGenerator;

import users.Group;

 

import java.math.BigInteger;

import java.util.ArrayList;

import java.util.HashMap;

 

public class ServerCore {

 

private Pairing pairing;

private PairingParameters pairingParameters;

private Field<Element> G0;

private Field<Element> G1;

private Field<Element> Zr;

private Element g;

private HashMap<String, Group> groups;

private ArrayList<String> groupNames;

 

private boolean aesKeysGenerated = false;

 

private StorageKey commonAESKey;

 

public ServerCore(HashMap<String, Group> groups) {

this.groups = groups;

groupNames = new ArrayList<>(groups.keySet());

AESCore.init();

}

 

/**

* @return all groups

*/

public HashMap<String, Group> getGroups() {

return groups;

}

 

/**

* Creates pairing mapping and groups

*/

public void setup() {

createGenerator();

}

 

/**

* Generates master key containing components ti (attributes)

* @return master key object

*/

public MskT generateMasterKey() {

Element y = Zr.newRandomElement();

 

HashMap<String, Element> smallTis = new HashMap<>(); // ti

 

for (String attribute: groupNames) {

Element ti = Zr.newRandomElement();

smallTis.put(attribute, ti);

}

 

return new MskT(y, smallTis);

}

 

/**

* Generates common public key containing components g^ti

* @param masterKey master key

* @return common public key object

*/

public PubT generatePublicKey(MskT masterKey) {

Element egg = pairing.pairing(g, g);

Element Y = egg.powZn(masterKey.getY());

 

HashMap<String, Element> bigTis = new HashMap<>(); // Ti = g^ti

for (String attribute: groupNames) {

Element bigTi = g.duplicate();

bigTi = bigTi.powZn(masterKey.getKeyComponent(attribute));

bigTis.put(attribute, bigTi);

}

 

return new PubT(pairing, G0, G1, Zr, g, Y, bigTis);

}

 

public StorageKey generateCommonAESKey(int aesKeyLength) {

commonAESKey = AESCore.generateKey(aesKeyLength);

return commonAESKey;

}

 

/**

* Generates for each group:

* 1) D - private group key set (Dij - key component for file j in group i)

* 2) AES key set for all files in this group

* 3) S - share parameters (Sij - parameter for file j belonging to group i)

* @param masterKey - master key

* @param publicKey common public key that provides components g^ti

* @param aesKeyLength - length of AES key

*/

public void generateGroupsKeys(MskT masterKey, PubT publicKey, int aesKeyLength) {

Element w = Zr.newRandomElement();

 

for (String groupName: groupNames) {

Group group = groups.get(groupName);

int numberOfFiles = group.getNumberOfFiles();

 

for (int i = 0; i < numberOfFiles; i++) {

 

// group keys generation

 

Element g = this.g.duplicate();

Element t = masterKey.getKeyComponent(groupName).duplicate();

Element y = masterKey.getY().duplicate();

y = y.mul(w);

y = y.div(t);

group.getGroupKey().addComponent(AESCore.encrypt(g.powZn(y).toBytes(), commonAESKey)); // Di = g^(y*w/t)

 

// share parameters generation

 

Element shareParameter = Zr.newRandomElement();

group.addShareParameter(shareParameter); // Sij

 

Element Ei = publicKey.getKeyComponent(groupName).duplicate();

Element s = shareParameter.duplicate();

s = s.div(w);

 

CphT cipherText = new CphT();

cipherText.setPublicShareKeyComponent(Ei.powZn(s));

cipherText.setFileNumber(i);

cipherText.setGroupName(groupName);

 

group.addCipherText(cipherText); // Ei

 

// AES keys generation

 

if (!aesKeysGenerated)

group.addFileKey(AESCore.generateKey(aesKeyLength));

}

}

 

if (!aesKeysGenerated)

aesKeysGenerated = true;

}

 

/**

* Encrypts ONE file (AES key) of ONE group

* @param message input bytes

* @param publicKey common public key

* @param s share parameter

* @return encrypted output

*/

public BigInteger enc(byte[] message, PubT publicKey, Element s) {

BigInteger M = new BigInteger(message);

 

Element Ys = publicKey.Y.duplicate();

Ys = Ys.powZn(s);

 

return M.multiply(Ys.toBigInteger());

}

 

private void createGenerator() {

int rbits = 32; // bit length of numbers ti for master key

int qbits = 64;

 

TypeACurveGenerator curveGenerator = new TypeACurveGenerator(rbits, qbits);

pairingParameters = curveGenerator.generate();

 

initAlgebraicStructures();

g = G0.newRandomElement();

}

 

public void useExistingParams(PairingParameters parameters, byte[] gBytes) {

this.pairingParameters = parameters;

initAlgebraicStructures();

g = G0.newElement();

g.setFromBytes(gBytes);

}

 

@SuppressWarnings("unchecked")

private void initAlgebraicStructures() {

pairing = PairingFactory.getPairing(pairingParameters);

G0 = pairing.getG1();

G1 = pairing.getGT();

Zr = pairing.getZr();

}

 

public PairingParameters getPairingParameters() {

return pairingParameters;

}

 

public Element getGroupGeneratorElement() {

return g;

}

 

}

 

 

Клиентская часть:

 

import domain.CphT;

import it.unisa.dia.gas.jpbc.Element;

import it.unisa.dia.gas.jpbc.Pairing;

 

import java.math.BigInteger;

 

public class ClientCore {

 

private Pairing pairing;

 

public ClientCore(Pairing pairing) {

this.pairing = pairing;

AESCore.init();

}

 

/**

* Decrypts cipher text with component of group key (Di)

* @param cipherText contains encrypted data E and public share key Ei

* @param groupKeyComponent Di

* @return decrypted data

*/

public byte[] dec(CphT cipherText, Element groupKeyComponent) {

Element Ei = cipherText.getPublicShareKeyComponent();

BigInteger E = cipherText.getEncryptedData();

 

if (E == null)

return null;

BigInteger result = E.divide(pairing.pairing(Ei, groupKeyComponent).toBigInteger());

return result.toByteArray();

}

}



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 205; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.153.105 (0.007 с.)