cgmta¶
- class cryptographic_estimators.MQEstimator.MQAlgorithms.cgmta.CGMTA(problem: MQProblem, **kwargs)¶
Bases:
MQAlgorithm
Construct an instance of CGMT-A estimator.
CGMT-A is an algorithm to solve the MQ problem over any finite field. It works when there is an integer $k$ such that $m - 2k < 2k^2 leq n - 2k$ [CGMT02].
Note
In this module the complexities are computed for k = min(m / 2, floor(sqrt(n / 2 - sqrt(n / 2)))).
- Parameters:
problem (MQProblem) – MQProblem object including all necessary parameters.
h (Optional[float]) – External hybridization parameter (default: 0).
memory_access (Optional[int]) – Specifies the memory access cost model (default: 0, choices: 0 - constant, 1 - logarithmic, 2 - square-root, 3 - cube-root or deploy custom function which takes as input the logarithm of the total memory usage).
complexity_type (Optional[int]) – Complexity type to consider (0: estimate, 1: tilde O complexity, default: 0).
Examples
>>> from cryptographic_estimators.MQEstimator.MQAlgorithms.cgmta import CGMTA >>> from cryptographic_estimators.MQEstimator.mq_problem import MQProblem >>> E = CGMTA(MQProblem(n=41, m=10, q=3)) >>> E CGMT-A estimator for the MQ problem with 41 variables and 10 polynomials
- Tests:
>>> E.problem.nvariables() == E.nvariables_reduced() True
- property attack_type¶
Returns the attack type of the algorithm.
- property complexity_type¶
Returns the attribute _complexity_type.
- get_optimal_parameters_dict()¶
Returns the optimal parameters dictionary.
- get_reduced_parameters()¶
- has_optimal_parameter()¶
Return True if the algorithm has optimal parameter.
- Tests:
>>> from cryptographic_estimators import BaseAlgorithm, BaseProblem >>> BaseAlgorithm(BaseProblem()).has_optimal_parameter() False
- linear_algebra_constant()¶
Returns the linear algebra constant.
- Tests:
>>> from cryptographic_estimators.MQEstimator.mq_algorithm import MQAlgorithm >>> from cryptographic_estimators.MQEstimator.mq_problem import MQProblem >>> MQAlgorithm(MQProblem(n=10, m=5, q=4), w=2).linear_algebra_constant() 2
- property memory_access¶
Returns the attribute _memory_access.
- memory_access_cost(mem: float)¶
Returns the memory access cost (in logarithmic scale) of the algorithm per basic operation.
- Parameters:
mem (float) – Memory consumption of an algorithm.
- Returns:
Memory access cost in logarithmic scale.
- Return type:
float
Note
memory_access: Specifies the memory access cost model (default: 0, choices: 0 - constant, 1 - logarithmic, 2 - square-root, 3 - cube-root or deploy custom function which takes as input the logarithm of the total memory usage)
- memory_complexity(**kwargs)¶
Return the memory complexity of the algorithm.
- Parameters:
**kwargs –
Arbitrary keyword arguments.
optimal_parameters - If for each optimal parameter of the algorithm a value is provided, the computation is done based on those parameters.
- npolynomials_reduced()¶
Return the number of polynomials after applying the Thomae and Wolf strategy.
- Returns:
The number of polynomials after applying the Thomae and Wolf strategy.
- Return type:
int
- Tests:
>>> from cryptographic_estimators.MQEstimator.mq_algorithm import MQAlgorithm >>> from cryptographic_estimators.MQEstimator.mq_problem import MQProblem >>> MQAlgorithm(MQProblem(n=5, m=10, q=2)).npolynomials_reduced() 10 >>> MQAlgorithm(MQProblem(n=60, m=20, q=2)).npolynomials_reduced() 18
- nvariables_reduced()¶
Return the number of variables after fixing some values.
- Tests:
>>> from cryptographic_estimators.MQEstimator.mq_algorithm import MQAlgorithm >>> from cryptographic_estimators.MQEstimator.mq_problem import MQProblem >>> MQAlgorithm(MQProblem(n=5, m=10, q=2)).nvariables_reduced() 5 >>> MQAlgorithm(MQProblem(n=25, m=20, q=2)).nvariables_reduced() 20
- optimal_parameters()¶
Return a dictionary of optimal parameters.
- Tests:
>>> from cryptographic_estimators import BaseAlgorithm, BaseProblem >>> BaseAlgorithm(BaseProblem()).optimal_parameters() {}
- parameter_names()¶
Return the list with the names of the algorithm’s parameters.
- Tests:
>>> from cryptographic_estimators import BaseAlgorithm, BaseProblem >>> BaseAlgorithm(BaseProblem()).parameter_names() []
- property parameter_ranges¶
Returns the set ranges for optimal parameter search.
Returns the set ranges in which optimal parameters are searched by the optimization algorithm (used only for complexity type estimate).
- reset()¶
Resets internal state of the algorithm.
- set_parameter_ranges(parameter: str, min_value: float, max_value: float)¶
Set range of specific parameter.
If optimal parameter is already set, it must fall in that range.
- Parameters:
parameter (str) – Name of parameter to set
min_value (float) – Lowerbound for parameter (inclusive)
max_value (float) – Upperbound for parameter (inclusive)
- set_parameters(parameters: dict)¶
Set optimal parameters to predifined values.
- Parameters:
parameters (dict) – Dictionary including parameters to set (for a subset of optimal_parameters functions)
- time_complexity(**kwargs)¶
Return the time complexity of the algorithm.
- Parameters:
**kwargs –
Arbitrary keyword arguments.
optimal_parameters - If for each optimal parameter of the algorithm a value is provided, the computation is done based on those parameters.